Segurança (in portuguese)

870
-1

Published on

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
870
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
34
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

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
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×