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 em Aplicações Web com PHP

7,554 views

Published on

Palestra sobre segurança em aplicações web com PHP apresentada no V Ensol (Encontro de Software Livre da Paraíba) no dia 22 de julho de 2011.

Published in: Technology
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download Full EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download doc Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Segurança em Aplicações Web com PHP

  1. 1. Segurança em AplicaçõesWeb com PHP Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  2. 2. Sobre mim● Mestre em Informática pela UFPB● Professor substituto no IFPB – C, PHP, Comércio Eletrônico● Professor na Faculdade IDEZ – HTML/CSS/PHP● Lexa Sistemas – www.lexasistemas.com.br – Criação de sites em Drupal● Letz – www.letz.com.br – Rede social para divulgação de eventos Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  3. 3. Esta palestra é sobre● Segurança em aplicações web – Boas práticas de programação – Erros comuns – Detalhes do PHP – Tipos de ataques a sites – Autenticação e autorização – Foco na implementação com PHP ● Pode ser aplicado para outras linguagens Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  4. 4. Esta palestra não é sobre● Segurança de servidores – Configuração de servidores – Firewalls – DNS, FTP, SSH, HTTPS, … – DoS, IP spoofing, phising, … – Spam Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  5. 5. Segurança e a linguagem PHP● Por que PHP?● PHP surgiu de forma despretensiosa● Acabou se tornando a linguagem server-side mais utilizada na web – Facilidade, rapidez, versatilidade, etc. Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  6. 6. Segurança e a linguagem PHP● Grandes poderes trazem grandes responsabilidades● Programadores inexperientes● Autodidatismo é bom, mas... – Aprendo apenas o que me interessa – Questões importantes acabam ficando de lado● Prazos apertados... Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  7. 7. Alguns casos recentes● Site Mysql.com tem banco de dados comprometido [1] – Ataque via SQL Injection – Acesso a usuários, senhas, e-mails, etc.[1] http://www.computerworld.com/s/article/9215249/MySQL_Web_site_falls_victim_to_SQL_injection_attack Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  8. 8. Alguns casos recentes● Sony  Sony Pictures[1]  Sony Japan[2]  Sony Greece[3]  Sony Canada[4][1] http://www.bbc.co.uk/news/technology-13642145[2] http://nakedsecurity.sophos.com/2011/05/24/sony-music-japan-hacked-through-sql-injection-flaw/[3] http://nakedsecurity.sophos.com/2011/05/22/sony-bmg-greece-the-latest-hacked-sony-site/[4] http://www.computerworld.com/s/article/9217028/Sony_says_hacker_stole_2_000_records_from_Canadian_site Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  9. 9. Alguns casos recentes● Sites do Governo Brasileiro – Vários órgãos públicos tiveram seu site atacado – Portal Brasil, Presidência, Senado, Receita Federal, IBGE, entre outros – Ataques de DoS, defacements e alguns roubos de dados Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  10. 10. Vamos ao que interessa Show me the code!Segurança em Aplicações Web com PHP V EnsolGedvan Dias 22 de julho de 2011
  11. 11. Configurações do PHP● register_globals  Variáveis globais são criadas automaticamente a partir de parâmetros GET, POST, cookies, sessões, etc.  Desabilitado por padrão a partir do PHP 4.2  Depracated no PHP 5.3 Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  12. 12. Tratamento de erros● Algumas configurações relacionadas a erros:  error_reporting: nível de erro a ser reportado – E_ALL ou E_ALL | E_STRICT  display_errors: exibir ou não erros na tela – Em produção, deve ser sempre desabilitado  log_errors: fazer log dos erros em arquivo  error_log: arquivo onde será feito log Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  13. 13. Manipulação de erros● set_error_handler()  Permite usar uma função própria para o tratamento dos erros● set_exception_handler()  Permite usar uma função para tratar exceções não capturadas Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  14. 14. set_error_handler()Segurança em Aplicações Web com PHP V EnsolGedvan Dias 22 de julho de 2011
  15. 15. Recomendações e boas práticasSegurança em Aplicações Web com PHP V EnsolGedvan Dias 22 de julho de 2011
  16. 16. Programação defensiva● “Prevenir é melhor do que remediar”● A internet não é um lugar amigável● Um plano B pode salvar a sua vida (seu emprego, sua reputação, etc.)● Pense sempre em minimizar os riscos Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  17. 17. KISS● Keep It Simple, Stupid● Evite a complexidade desnecessária● Abra mão da “esperteza” em prol da segurança Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  18. 18. KISSSegurança em Aplicações Web com PHP V EnsolGedvan Dias 22 de julho de 2011
  19. 19. Regra de Ouro Toda entrada deve ser filtrada e toda saída deve ser “escapada”Segurança em Aplicações Web com PHP V EnsolGedvan Dias 22 de julho de 2011
  20. 20. Filtro e Validação● Você está recebendo o que está esperando receber?● Trate todo o input da sua aplicação – Dados de formulários – Parâmetros da URL – Informações de cookies – Dados de sistemas externos● Validação x Filtro (sanitizing) Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  21. 21. Validação x Filtro CPF 241.775.842-31 filtro/sanitizing validação 24177584231 Erro! Formato inválido!Segurança em Aplicações Web com PHP V EnsolGedvan Dias 22 de julho de 2011
  22. 22. API Data Filtering● Funções para tratar o input usando vários tipos de filtro/validação● Disponível a partir do PHP 5.2● Pode substituir totalmente o acesso aos arrays superglobais – $_GET, $_POST, $_COOKIE, $_SERVER, $_ENV Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  23. 23. filter_inputSegurança em Aplicações Web com PHP V EnsolGedvan Dias 22 de julho de 2011
  24. 24. Escapando a Saída● Regra de ouro: … toda saída deve ser “escapada” – Pelo menos a toda a saída não confiável● O que quer dizer “escapar”? – Vem do inglês escape – Nesse contexto, quer dizer que devemos converter determinados caracteres (ou sequências)● Objetivo: manter a integridade da saída Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  25. 25. Escapando o HTML● A saída mais comum do PHP é o HTML● No HTML temos, basicamente:  Tags (abertura, fechamento, atributos) – Definem a estrutura do documento  Conteúdo das tags (valores, texto)● Escape no HTML significa, normalmente, impedir que hajam tags onde não deveria haver Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  26. 26. Escapando o HTML● Funções: htmlespecialchars(), htmlentities()● API Data Filtering: filter_input(), filter_var() Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  27. 27. Principais Tipos de Ataques e VulnerabilidadesSegurança em Aplicações Web com PHP V EnsolGedvan Dias 22 de julho de 2011
  28. 28. SQL Injection● Consiste em tentar inserir um trecho de código SQL em uma query que será enviada a um banco de dados Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  29. 29. SQL InjectionSegurança em Aplicações Web com PHP V EnsolGedvan Dias 22 de julho de 2011
  30. 30. Exploits of a momSegurança em Aplicações Web com PHP V EnsolGedvan Dias 22 de julho de 2011
  31. 31. SQL Injection● SQL Injection é uma das vulnerabilidades mais comuns em aplicações PHP – Felizmente, é muito fácil se proteger contra esse tipo de ataque● Basta escapar os dados enviados nas queries – Lembra da regra de ouro? – Ao utilizar banco de dados, as queries são dados de saída (output) da aplicação – Portanto, devem ser escapadas Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  32. 32. Escapando Valores de Queries● Para escapar os valores enviados ao banco, pode-se usar as funções de cada extensão – MySQL: mysql_real_escape_string() – PostgreSQL: pg_escape_string() – … – Em último caso, pode-se usar a função addslashes()● Interfaces OO e camadas de abstração geralmente têm um método equivalente – PDO: quote() Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  33. 33. Bound Parameters● As camadas de abstração, normalmente, também tem suporte a parâmetros bound – O valores são vinculados através de marcadores – A própria biblioteca faz o escape dos dados  Oferecem uma ótima proteção contra SQL Injection Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  34. 34. Escape de Identificadores● Normalmente, apenas os valores precisam ser escapados● Em alguns casos, também é preciso escapar (ou filtrar) os identificadores – Nomes de tabelas e campos – Nos casos onde eles vêm de uma fonte externa● No MySQL, os identificadores pode ser escritos entre crases. – Ex: SELECT * FROM `tablename` Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  35. 35. XSS Cross-Site ScriptingSegurança em Aplicações Web com PHP V EnsolGedvan Dias 22 de julho de 2011
  36. 36. Cross-Site Scripting● Também é um dos tipos mais comuns de ataques● Toda aplicação que exibe dados recebidos (input) corre riscos  Se esses dados não forem devidamente filtrados e escapados, a aplicação estará vulnerável Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  37. 37. Cross-Site Script● O atacante normalmente explorará essa falha inserindo tags e código javascript no seu HTML – Tags <iframe> chamando páginas maliciosas – Código js para redirecionar o usuário para outras páginas – Código js para ler os cookies do usuário e enviá-los para outros sites – Código js para alterar as informações do site (defacement) Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  38. 38. Cross-Site Scripting● Para se proteger de XSS, basta fazer o que já foi dito  Filtrar a entrada, e  Escapar a saída – htmlentities, htmlespecialchars, etc. Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  39. 39. Cross-Site Scripting DemonstraçãoSegurança em Aplicações Web com PHP V EnsolGedvan Dias 22 de julho de 2011
  40. 40. CSRF Cross-Site Request ForgerySegurança em Aplicações Web com PHP V EnsolGedvan Dias 22 de julho de 2011
  41. 41. CSRF● Como o nome diz, consiste em tentar forjar uma requisição de um site para outro● O atacante usa a própria vítima para fazer a requisição, sem que ela tenha conhecimento● Portanto, é muito difícil identificar se uma requisição é legítima ou um ataque CSRF Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  42. 42. CRSFUma linha de código vale mais que mil palavras (demonstração) Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  43. 43. CSRF● Então como se defender do CSRF? Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  44. 44. GET x POST● Antes de tudo  Entenda a diferença entre GET e POST  Funcionamento  Objetivos  Saiba quando usar cada um Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  45. 45. GET● O método GET deve ser utilizado apenas para consultas  Exibição de páginas  Listagens  Pesquisas  Downloads, etc. Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  46. 46. POST● O método POST deve ser utilizado para as operações  Cadastros  Atualização  Exclusão  Autenticação Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  47. 47. GET● Não use o GET para realizar operações*● Nada que vá modificar os seus dados● Dessa forma, os ataques CSRF via GET não causarão nenhum dano Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  48. 48. Operações via GET● Às vezes, é necessário realizar operações via GET – Ativação de usuário – Reset de senha● Normalmente, o usuário recebe o link por e- mail● Nesses casos, o link deve conter um código gerado aleatoriamente – De preferência, com data de expiração Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  49. 49. POST● Entretanto, ainda estamos vulneráveis a ataques CSRF via POST● Uma solução é utilizar tokens na sessão  Os tokens são gerados de forma aleatória  São armazenados na sessão e incluídos no formulário  Ao receber a requisição, os tokens da sessão e do POST são comparados Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  50. 50. POST● Outras técnicas ainda podem ser utilizadas para incrementar a segurança  Incluir um tempo de expiração para os tokens  Validar o cabeçalho HTTP_REFERER (embora não seja 100% confiável) Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  51. 51. Request SpoofingSegurança em Aplicações Web com PHP V EnsolGedvan Dias 22 de julho de 2011
  52. 52. Request Spoofing● Request Spoofing é a tentativa de manipular requisições de alguma forma● A forma mais simples é alterar manualmente os parâmetros em uma URL● Também é possível alterar os elementos de um formulário – Modificar atributos (maxlength, disabled, readonly, name, value) – Inserir ou remover elementos Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  53. 53. Request Spoofing● Para alterar um formulário, basta simplesmente salvar a página no seu computador e editá-la● Ou utilizar ferramentas como o Firebug, que permite editar todo o HTML● Outras ferramentas permitem até executar códigos javascript de terceiros● Observação – A saída que você gera na aplicação (HTML + CSS + Javascript) não é mais sua, é do cliente Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  54. 54. Request Spoofing● Com um pouco mais de conhecimento, é possível criar requisições HTTP completas – Pode ser feito na linha de comando, com o comando telnet, por exemplo – Pode-se criar um script em qualquer linguagem que se conecta ao socket do servidor web – Existem várias outras formas● O HTTP é um padrão aberto e sua aplicação deve estar pronta para isso Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  55. 55. Request Spoofing● Como se proteger nessa situação? Filtrar a entrada … … e escapar a saída Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  56. 56. ArquivosSegurança em Aplicações Web com PHP V EnsolGedvan Dias 22 de julho de 2011
  57. 57. Exposição de Código● Deve-se evitar arquivos PHP com extensão diferente de .php (ex: .inc)  Ou deve-se ter certeza que estão fora da raiz web  Ou que o Apache está configurado corretamente para executá-los e não exibi-los Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  58. 58. Inclusão de Arquivos● Inclusão arquivos errados: index.php?usuario=../../admin● Code injection: POST path=http://meusite.com Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  59. 59. Command Injection● Se a sua aplicação executa comandos do shell, também é preciso escapá-los● Funções  escapeshellcmd  escapeshellarg Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  60. 60. Autenticação e AutorizaçãoSegurança em Aplicações Web com PHP V EnsolGedvan Dias 22 de julho de 2011
  61. 61. Autenticação● É o processo de identificar um usuário● Ou seja, verificar se a pessoa que está acessando corresponde ao seu usuário● Dependendo de sua aplicação, considere o uso do protocolo HTTPS para a autenticação Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  62. 62. Autorização● Também é chamado de controle de acesso● Consiste em determinar se o usuário está autorizado a acessar um determinado recurso – Página, operação, consulta, etc.● Normalmente, as informações de autorização ficam na sessão● Para processos críticos, considere fazer uma nova autenticação Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  63. 63. Finalizando...Segurança em Aplicações Web com PHP V EnsolGedvan Dias 22 de julho de 2011
  64. 64. Dicas finais● Crie o hábito de programar de forma segura● Em uma equipe, todos os programadores devem ter os conceitos básicos em mente● Estabeleça uma política de segurança previamente● Esteja atualizado Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  65. 65. OWASP● The Open Web Application Secutiry Project – Padrões relacionados a segurança – Levantamento sobre vulnerabilidades e ataque – Tecnologias e ferramentas – Notícias, etc.● Projeto apoiado por grandes empresas e universidades  Amazon, IBM, Mozilla, Oracle, etc. Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  66. 66. LivrosSegurança em Aplicações Web com PHP V EnsolGedvan Dias 22 de julho de 2011
  67. 67. Links● OWASP: www.owasp.org● Manual do PHP: http://php.net/manual/en/security.php● PHP Security Consortium: http://phpsec.org/ Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  68. 68. Obrigado! gedvan@gmail.com - @gedvanSegurança em Aplicações Web com PHP V EnsolGedvan Dias 22 de julho de 2011

×