Segurança em PHP: O que você precisa saber

1,364 views

Published on

Published in: Technology
2 Comments
4 Likes
Statistics
Notes
No Downloads
Views
Total views
1,364
On SlideShare
0
From Embeds
0
Number of Embeds
12
Actions
Shares
0
Downloads
49
Comments
2
Likes
4
Embeds 0
No embeds

No notes for slide

Segurança em PHP: O que você precisa saber

  1. 1. Segurança em PHP: o que você precisa saber Jota Júnior
  2. 2. Tolos ignoram complexidade, enquanto pragmáticos sofrem com ela. Alguns até conseguem evitar. Gênios a removem. Epigrams in Programming(http://www.cs.yale.edu/quotes.html)
  3. 3. Há duas formas de escrever programas sem erros; só a terceira realmente funciona. Epigrams in Programming(http://www.cs.yale.edu/quotes.html)
  4. 4. “Não confie em estranhos.” Sua mãe
  5. 5. Sempre haverá um “ZzboladozZ” Acreditem, já vi este nick! Ele se dizia “ráquer”
  6. 6. Vamos lá! • OWASP • SQL Injection • XSS • CSRF • File Upload • Path Traversal
  7. 7. Vamos lá! • OWASP • SQL Injection • XSS • CSRF • File Upload • Path Traversal
  8. 8. Uma boa fonte é mais importante do que uma boa memória. https://www.owasp.org/index.php/PHP_Security_Cheat_Sheet https://www.owasp.org/
  9. 9. Vamos lá! • OWASP • SQL Injection • XSS • CSRF • File Upload • Path Traversal
  10. 10. SQL Injection Um dado proveniente do usuário nunca pode virar código diretamente.
  11. 11. SQL Injection
  12. 12. SQL Injection
  13. 13. SQL Injection Existe o jeito complexo e o jeito certo. A escolha é sua.
  14. 14. SQL Injection E quando a query é dinâmica, ou existe alguma limitação para os prepared statements?
  15. 15. SQL Injection
  16. 16. SQL Injection
  17. 17. Vamos lá! • OWASP • SQL Injection • XSS • CSRF • File Upload • Path Traversal
  18. 18. XSS Cross-Site Scripting - Permite inserir código que persiste na página - Usuário pode inserir código malicioso e tornar seus outros usuários vítimas
  19. 19. XSS <embed src="http://www.orkut.com.br/GLogin.aspx ?cmd=logout"&gt;
  20. 20. XSS Retirado do site da OWASP Simples como essa função. http://br2.php.net/htmlspecialchars
  21. 21. XSS Novamente, várias ferramentas prontas para facilitar. Exemplo do framework CodeIgniter (http://ellislab.com/codeigniter/user-guide/libraries/input.html)
  22. 22. Vamos lá! • OWASP • SQL Injection • XSS • CSRF • File Upload • Path Traversal
  23. 23. CSRF Chega de proteger o sistema. Proteja também seu usuário.
  24. 24. CSRF Cross Site Request Forgery Permite forjar requisições, levando seu usuário a executar ações indesejadas.
  25. 25. CSRF Como? <a href=”http://bancoruim.com/usuario/transferir/jota/1000”> Download </a>
  26. 26. CSRF Você tem um controller que modifica determinado dado quando requisitado. Como saber que é uma requisição legítima?
  27. 27. CSRF 1- Crie um token aleatório e complexo, como chave de segurança, provavelmente na hora da autenticação.
  28. 28. CSRF 2- Armazene este token também em uma sessão (ou outra fonte de dados persistente similar, não acessível ao usuário).
  29. 29. CSRF 3- Ao executar qualquer ação dentro do site, como submeter um formulário em AJAX, envie também o token (que pode estar guardado em um hidden input).
  30. 30. CSRF 4- Ao receber alguma requisição, verifique se o token foi enviado e, caso tenha sido, se é igual ao armazenado em sessão. Se não, negue.
  31. 31. CSRF Outras considerações: Complicações podem existir caso o token seja previsível ou acessível (normalmente se existe outra falha associada, como do navegador ou de sessão).
  32. 32. CSRF Como o Facebook trata CSRF no PHP SDK: https://github.com/facebook/facebook-php-sdk/blob/master/src/base_facebook.php Passo 1 e 2: Cria token e guarda em sessão
  33. 33. CSRF Passo 3: Envia o token estabelecido para a requisição
  34. 34. CSRF Passo 4: Ao receber a requisição, verifica se o código enviado é o mesmo da sessão
  35. 35. Vamos lá! • OWASP • SQL Injection • XSS • CSRF • File Upload • Path Traversal
  36. 36. File Upload Aquele upload de imagens inofensivo pode se tornar uma grande dor de cabeça.
  37. 37. File Upload Alguns dados, aparentemente confiáveis, podem ser maliciosamente manipulados. Entre eles, estão os cabeçalhos HTTP.
  38. 38. File Upload Confira, sempre.
  39. 39. File Upload Uma forma de verificar a imagem é verificando a extensão e o MIME-Type.
  40. 40. File Upload A extensão é bem simples.
  41. 41. File Upload O índice type do $_FILES traz o MIME-Type do arquivo, mas o que ele diz ter. É manipulável e, portanto, não pode ser utilizado.
  42. 42. File Upload Código retirado do site da OWASP Gasta mais recursos, mas faz uma verificação muito mai confiável, pois obtém o real MIME-Type.
  43. 43. File Upload Outras considerações: - GIFs são do mal. Quando possível, não aceite; - O velho getimagesize(); é burlável (por GIFs, inclusive!)
  44. 44. Vamos lá! • OWASP • SQL Injection • XSS • CSRF • File Upload • Path Traversal
  45. 45. Path Traversal Imponha limites.
  46. 46. Path Traversal Você recebe o caminho de um arquivo, e executa alguma ação com isso. http://www.site.com/download.php?arquivo=carro.jpg
  47. 47. Path Traversal O que você recebe como parâmetro está em um diretório específico, construído para esse fim.
  48. 48. Path Traversal Mas eis que surge o “ZzboladozZ”... http://www.site.com/download.php?arquivo=../../../../etc/shado w
  49. 49. Path Traversal É necessário impor limites, não deixar que o usuário vá a qualquer lugar do sistema. Ele só pode inserir o nome do arquivo, e não um caminho.
  50. 50. Path Traversal Simplesmente não.
  51. 51. Path Traversal Simples como isso, sem REGEX. Dessa forma, ../../../anything vira só anything, e nenhum arquivo indevido é acessado.
  52. 52. Path Traversal 1. Quando possível, pode usar identificadores numéricos para os arquivos, e não caminhos.
  53. 53. Path Traversal Não funciona para poucos casos, como arquivos Phar. E realpath requer que o caminho exista (caso não exista, retorna falso). 2. Caso queira que sejam permitidos diretórios no caminho, mas só “abaixo”, pode usar o
  54. 54. Obrigado :-)

×