Desenvolvendo com Segurança em PHP

2,237 views
2,117 views

Published on

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

No Downloads
Views
Total views
2,237
On SlideShare
0
From Embeds
0
Number of Embeds
18
Actions
Shares
0
Downloads
158
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Desenvolvendo com Segurança em PHP

  1. 1. SEGURANÇA EM PHP Augusto Pascutti Friday, January 29, 2010
  2. 2. Augusto Pascutti 4 anos de experiência Zend Certified Engineer Co-Fundador PHPSP Host PHPSPCast Habari,CakePHP Friday, January 29, 2010
  3. 3. Segurança Friday, January 29, 2010
  4. 4. Princípios Se mantenha a eles e você terá: Um usuário feliz Um patrão feliz Finais de Semana e quem sabe férias Friday, January 29, 2010
  5. 5. Segurança é ... Friday, January 29, 2010
  6. 6. como um ogro ... Friday, January 29, 2010
  7. 7. Que são como cebolas ! Friday, January 29, 2010
  8. 8. Segurança em camadas Segurança nunca é demais Segurança em profundidade Aplique camadas de segurança em tudo que puder Não conte com a bondade no mundo Friday, January 29, 2010
  9. 9. Informação Confidencial Friday, January 29, 2010
  10. 10. Informação Confidencial Classifique tudo que for sensível Impeça o acesso a essa informação Lei do menor privilégio Se o usuário não precisa ver, não deixe. Friday, January 29, 2010
  11. 11. Segurança x Usabilidade Shozu.com Friday, January 29, 2010
  12. 12. Segurança x Usabilidade reCaptcha Friday, January 29, 2010
  13. 13. Segurança x Usabilidade Procure implementar segurança transparente ao usuário Se não for possível: Pense no Risco e na Usabilidade Tenha em mente que dependemos de usuários felizes NUNCA esqueça da usabilidade Friday, January 29, 2010
  14. 14. Segurança x Usabilidade Qual o animal da figura ? Friday, January 29, 2010
  15. 15. Vigie sempre Nunca confie no usuário Nunca confie em outras aplicações Nunca confie. Mantenha registro da onde, de quem e quando a informação for gerada Friday, January 29, 2010
  16. 16. Filtre o INPUT Identifique o input Filtre o input Friday, January 29, 2010
  17. 17. Identificando Input O input pode vir de diversos lugares Formulário Outra aplicação Sistema Friday, January 29, 2010
  18. 18. Filtrando Friday, January 29, 2010
  19. 19. Filtrando Friday, January 29, 2010
  20. 20. Filtrando Friday, January 29, 2010
  21. 21. Filtrando Friday, January 29, 2010
  22. 22. Filtrando Friday, January 29, 2010
  23. 23. Filtrando Friday, January 29, 2010
  24. 24. Filtrando Friday, January 29, 2010
  25. 25. Filtrando Friday, January 29, 2010
  26. 26. Filtrando Friday, January 29, 2010
  27. 27. Escape o Output O que é output ? echo, print, sprintf <?= Na grande maioria, o destino é o navegador Escapar HTML Friday, January 29, 2010
  28. 28. Escape o Output Friday, January 29, 2010
  29. 29. Escape o Output Friday, January 29, 2010
  30. 30. Escape o Output Friday, January 29, 2010
  31. 31. htmlentities() Converte TODO caractere para entidade HTML correspondente Segundo e terceiro parâmetro são opcionais Segundo: como as aspas (duplas e simples) seão tratadas Padrão: ENT_COMPAT ENT_QUOTES: Converte ambas para entidade HTML Terceiro: encoding do output Padrão: ISO-8859-1 Friday, January 29, 2010
  32. 32. Escape o Output Friday, January 29, 2010
  33. 33. Brindes Extensão dos arquivos sempre “.php” Dentro do DocRoot, só o necessário Mantenha seu código simples e encapsulado Favoreça Orientação a Objetos Friday, January 29, 2010
  34. 34. TOP 10 OWASP Lista de riscos de Segurança (rc1) de 2010 Injection XSS Quebra de Autenticação e Problemas de Sessões Referências não seguras a Objetos CSRF Erros de Configuração Falhas ao restringir acesso a URLs Redirecionamentos e Encaminhamentos não seguros Métodos de criptografia não seguros Segurança insuficiente no transporte de dados Friday, January 29, 2010
  35. 35. Sql Injection O que é ? Envio de comandos não tratados pela aplicação para o interpretador Impacto Toda a base de dados pode ser lida ou modificada Pode garantir acesso ao banco de dados ou até ao Sistema Operacional Friday, January 29, 2010
  36. 36. Cross Site Scripting (XSS) O que é ? Dados do atacante são enviados ao navegador do cliente Impacto Roubo de sessão, de dados sensíveis, phishing Friday, January 29, 2010
  37. 37. Cross Site Request Forgery (CSRF) O que é ? O navegador é “enganado” e envia um comando a um site vulnerável Impacto Iniciar transações (tranferência, logout, cancelamento) Acesso sensível a dados Mudança de dados da conta Friday, January 29, 2010
  38. 38. CSRF Friday, January 29, 2010
  39. 39. CSRF Friday, January 29, 2010
  40. 40. CSRF <img src="http://loja/comprar.php?quant=100" /> Friday, January 29, 2010
  41. 41. CSRF Friday, January 29, 2010
  42. 42. CSRF Friday, January 29, 2010
  43. 43. CSRF Friday, January 29, 2010
  44. 44. Problemas de Configuração O que é ? Configuração de rede e do servidor de aplicação Impacto Acesso ao Sistema Operacional através de um problema conhecido Acesso a dados da aplicação Friday, January 29, 2010
  45. 45. allow_url_fopen Permite acesso a recursos remotos Valor padrão: On Aliado ao ‘allow_url_include’ (> 5.2) é muito perigoso Friday, January 29, 2010
  46. 46. allow_url_fopen $conteudo = file_get_contents(“http://www.google.com”) Friday, January 29, 2010
  47. 47. allow_url_fopen include “http://www.bad-bad-site.com” Friday, January 29, 2010
  48. 48. register_globals Exporta índices de super globais para variáveis comuns Impede que se identifique a origem do dado Padrão < 4.2: On >4.2: Off Friday, January 29, 2010
  49. 49. register_globals Friday, January 29, 2010
  50. 50. register_globals Friday, January 29, 2010
  51. 51. register_globals Friday, January 29, 2010
  52. 52. magic_quotes_gpc Escapa todos os dados em $_GET, $_POST e $_COOKIE Usa addslashes() e não escape nativo do seu banco Complica seu algoritmo de filtro Padrão: On Obsoleto no PHP 5.3 Removido do PHP 6 Friday, January 29, 2010
  53. 53. display_errors Exibe no output erros do PHP DEVE ser usado no desenvolvimento DEVE ser desligado na produção Padrão: On Friday, January 29, 2010
  54. 54. error_reporting Controla os níveis de erros que devem ser exibidos Ajuda na identificação de erros e boas práticas Recomendado: -1 Friday, January 29, 2010
  55. 55. safe_mode Restringe algumas funcões tidas como prejudiciais Verifica se o dono do arquivo a ser executado é o mesmo do script em execução Melhora a segurança Não é suficiente Padrão: Off Friday, January 29, 2010
  56. 56. Acesso a URLs Restritas O que é? Permitir que um usuário possa forjar uma autorização a uma URL sensível Impacto Permitir ações privilegiadas a qualquer pessoa Friday, January 29, 2010
  57. 57. Redirecionamentos Inválidos O que é? Enviar o usuário para uma URL não valida Impacto Phishing Friday, January 29, 2010
  58. 58. Criptografia Não Segura O que é? Falha na identificação de todos os dados que devem ser criptografados Uso de criptografia não segura (md5, sha1) Impacto Acesso a dados sensíveis Solução mcrypt Friday, January 29, 2010
  59. 59. Transporte de dados O que é? Falta de segurança na troca de informações sensíveis Impacto Acesso a dados sensíveis Solução SSL ou TLS para transporte dos dados Friday, January 29, 2010
  60. 60. Perguntas ? Augusto Pascutti augusto@phpsp.org.br @augustohp Friday, January 29, 2010
  61. 61. Referências Essential PHP Security - Chris Chiflett - O’Reilly http://www.owasp.org/ http://phpsp.org.br/category/phpsp/phpspcast/ Segurança em PHP - Márcio Pessoa - Novatec Friday, January 29, 2010

×