Desenvolvimento
Seguro com PHP
Palestrante: Flávio Gomes da Silva Lisboa
www.fgsl.eti.br
Desenvolvimento
Seguro com PHP
“Com um grande poder,
vem uma grande
responsabilidade”.
Desenvolvimento Seguro com PHP
Poder e Responsabilidade
“Ben Parker avisou uma vez seu jovem sobrinho Peter Peter, cujo al...
Desenvolvimento Seguro com PHP
Falta de segurança: mito do PHP
A maior fraqueza na maioria dos programas PHP não é inerent...
Desenvolvimento Seguro com PHP
Conceitos e Práticas
Toda Entrada está Doente
Lista Branca versus Lista Negra
Filtro de Ent...
Desenvolvimento Seguro com PHP
Toda Entrada está Doente
►Se o dado se origina de uma fonte externa, ele não pode ser confi...
Desenvolvimento Seguro com PHP
Lista Branca versus Lista Negra
►Lista Negra
→ Menos restritiva.
→ Há um conjunto específic...
Desenvolvimento Seguro com PHP
Filtro de Entrada
Uma vez que toda entrada é doente e não pode ser confiável, é
necessário ...
Desenvolvimento Seguro com PHP
Tratamento de Saída
Assim como a filtragem de entrada protege sua aplicação de dados
malici...
Desenvolvimento Seguro com PHP
Register Globals
Se configurada como On todas as variáveis provenientes de literais de
cons...
Desenvolvimento Seguro com PHP
Formulários Falsificados
Há várias formas de falsificar formulários, o mais fácil deles é
s...
Desenvolvimento Seguro com PHP
Cross-Site Scripting (XSS)
É um dos mais comuns e mais conhecidos tipos de ataque.
Explora ...
Desenvolvimento Seguro com PHP
Cross-Site Request Forgeries (CSRF)
É um ataque que tenta fazer com que uma vítima envie se...
Desenvolvimento Seguro com PHP
SQL Injection
Ocorre quando um usuário malicioso experimenta obter informações
sobre um ban...
Desenvolvimento Seguro com PHP
Session Fixation
É possível configurar o identificador de sessão manualmente através de
um ...
Desenvolvimento Seguro com PHP
Session Hijacking
Este é um termo genericamente usado para descrever quaisquer meios
pelos ...
Desenvolvimento Seguro com PHP
Remote Code Injection
Ocorre quando um atacante é capaz de fazer sua aplicação executar
cód...
Desenvolvimento Seguro com PHP
Command Injection
O PHP provê grande poder com as funções exec(), system() e passthru(),
be...
Desenvolvimento Seguro com PHP
Mensagens de Erro são para o Desenvolvimento
Desligue display_errors na produção.
Use log_e...
Desenvolvimento Seguro com PHP
Use require ao invés de include
require gera erros fatais e interrompe a
aplicação. include...
Desenvolvimento Seguro com PHP
Criptografe os Dados
Funções: MD5, SHA1, mcrypt, etc
Algumas Dicas Importantes
Desenvolvimento Seguro com PHP
Desligue magic_quotes_gpc
Afeta a portabilidade (está ligada, está desligada?)
Performance:...
Desenvolvimento Seguro com PHP
http://www.php.net/manual/pt_BR/security.php
Onde obtenho ajuda?
Desenvolvimento Seguro com PHP
Sugestão de Leitura
Desenvolvimento Seguro com PHP
Perguntas
?
www.fgsl.eti.br
Desenvolvimento Seguro com PHP
Fim
Obrigado
Próximos SlideShares
Carregando em…5
×

PHP Desenvolvimento Seguro

2.565 visualizações

Publicada em

Orientações para desenvolvimento seguro em PHP

Publicada em: Tecnologia
0 comentários
3 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
2.565
No SlideShare
0
A partir de incorporações
0
Número de incorporações
3
Ações
Compartilhamentos
0
Downloads
91
Comentários
0
Gostaram
3
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

PHP Desenvolvimento Seguro

  1. 1. Desenvolvimento Seguro com PHP Palestrante: Flávio Gomes da Silva Lisboa www.fgsl.eti.br Desenvolvimento Seguro com PHP
  2. 2. “Com um grande poder, vem uma grande responsabilidade”.
  3. 3. Desenvolvimento Seguro com PHP Poder e Responsabilidade “Ben Parker avisou uma vez seu jovem sobrinho Peter Peter, cujo alter- ego super-herói é o Homem-Aranha, que “com um grande poder, vem uma grande responsabilidade”. Assim é com a segurança em aplicações PHP. O PHP fornece um rico conjunto de ferramentas com imenso poder – alguns tem argumentado que talvez seja muito poder – e este poder, quando usado com cuidadosa atenção aos detalhes, permite a criação de aplicações complexas e robustas. Por outro lado, sem essa atenção para os detalhes, usuários maliciosos podem usar o poder do PHP para seus próprios interesses, atacando aplicações de várias formas.” Introdução Zend PHP 5 Certification Study Guide
  4. 4. Desenvolvimento Seguro com PHP Falta de segurança: mito do PHP A maior fraqueza na maioria dos programas PHP não é inerente a linguagem em si, mas meramente um problema de código escrito desconsiderando a segurança. Por essa razão, você sempre deve investir um pouco de tempo considerando as implicações de um certo pedaço de código, para ter certeza do dano possível se uma variável não esperada for submetida ao mesmo. Introdução Manual do PHP: www.php.net
  5. 5. Desenvolvimento Seguro com PHP Conceitos e Práticas Toda Entrada está Doente Lista Branca versus Lista Negra Filtro de Entrada Tratamento de Saída Register Globals Segurança de Website Formulários Falsificados Cross-Site Scripting Cross-Site Request Forgeries Segurança de Banco de Dados Segurança de Sessão Segurança do Sistema de Arquivos Remote Code Injection Command Injection Algumas Dicas Importantes Agenda
  6. 6. Desenvolvimento Seguro com PHP Toda Entrada está Doente ►Se o dado se origina de uma fonte externa, ele não pode ser confiável. ►Não temos certeza de os dados contém caracteres que podem ser executados no contexto errado. ►Dados de todas as matrizes superglobais, exceto $_SESSION devem ser considerados doentes. CONCLUSÃO: Todo dado deve ser filtrado. Conceitos e Práticas Zend PHP 5 Certification Study Guide
  7. 7. Desenvolvimento Seguro com PHP Lista Branca versus Lista Negra ►Lista Negra → Menos restritiva. → Há um conjunto específico de palavras que são consideradas inapropriadas. → Qualquer palavra que não conste da lista é permitida. → Listas negras devem ser modificadas continuamente, e expandidas quando novos vetores de ataque tornam-se evidentes. ►Lista Branca → Mais restritiva. → Identifica somente os dados que são aceitáveis. → Mantém controle sobre os parâmetros que mudam e não os deixa aos caprichos de pretensos atacantes. CONCLUSÃO: Listas brancas oferecem mais proteção contra ataque do que listas negras. Conceitos e Práticas
  8. 8. Desenvolvimento Seguro com PHP Filtro de Entrada Uma vez que toda entrada é doente e não pode ser confiável, é necessário filtrar sua entrada de modo a garantir que a entrada recebida seja a esperada. Para fazer isto, use uma abordagem de lista branca. Filtrar com uma abordagem de lista branca coloca o controle firmemente em suas mãos e assegura que sua aplicação não receberá dados maliciosos. Você deve forçar o usuário a fornecer dados corretos e então tentar limpar e sanitizá-los por conta própria. Funções: addslashes(), ctype_*(), html_entity_decode(), htmlentities(), strip_tags(), stripslashes(), trim(), entre outras. Conceitos e Práticas
  9. 9. Desenvolvimento Seguro com PHP Tratamento de Saída Assim como a filtragem de entrada protege sua aplicação de dados maliciosos e nocivos, o tratamento de saída protege o cliente e o usuário de comandos potencialmente perigosos. A saída deve ser tratada porque os clientes – navegadores Web, servidores de banco de dados, e assim por diante – freqüentemente executam uma ação quando encontram caracteres especiais. Funções: addslashes(), ctype_*(), html_entity_decode(), htmlentities(), strip_tags(), stripslashes(), trim(), entre outras. Conceitos e Práticas
  10. 10. Desenvolvimento Seguro com PHP Register Globals Se configurada como On todas as variáveis provenientes de literais de consulta, formulários postados, sessões armazenadas, cookies, e assim por diante, estão disponíveis como o que parecem ser variáveis nomeadas localmente. Se as variáveis não forem inicializadas antes do uso, é possível para um usuário malicioso configurar variáveis de script e comprometer uma aplicação. Tira do programador a noção de origem dos dados. Tira do interpretador da linguagem a noção de origem dos dados. Desabilitada por padrão à partir da versão 4.2.0 e na versão 6 será eliminada. Conceitos e Práticas
  11. 11. Desenvolvimento Seguro com PHP Formulários Falsificados Há várias formas de falsificar formulários, o mais fácil deles é simplesmente copiar um formulário alvo e executá-lo de um lugar diferente. Falsificar um formulário torna possível para um atacante remover todas as restrições do lado do cliente impostas pelo formulário de modo a submeter toda e qualquer forma de dados para sua aplicação. Submissões de formulários falsificados são difíceis de prevenir. CONCLUSÃO: Nunca dependa somente da validação do lado do cliente. Segurança de Website
  12. 12. Desenvolvimento Seguro com PHP Cross-Site Scripting (XSS) É um dos mais comuns e mais conhecidos tipos de ataque. Explora a confiança do usuário na aplicação e é geralmente um esforço para roubar informações do usuário, tal como cookies e outros dados de identificação pessoal. Todas as aplicações que mostram a entrada são um risco. Exemplo: fóruns, blogs, etc. Pode ser contornado com o tratamento da saída. Segurança de Website
  13. 13. Desenvolvimento Seguro com PHP Cross-Site Request Forgeries (CSRF) É um ataque que tenta fazer com que uma vítima envie sem saber requisições HTTP, normalmente para URLs que requerem acesso privilegiado e usar a sessão existente da vítima para determinar o acesso. A requisição HTTP então força a vítima a executar uma ação particular baseada no seu nível de privilégio, tal como fazer uma compra ou modificar ou remover uma informação. Sua aplicação necessita da habilidade de determinar se uma requisição foi intencional e legítima ou forjada e maliciosa. Pode ser contornado com o uso de um token randômico armazenado em sessão, que seja gravado nos formulários. Segurança de Website
  14. 14. Desenvolvimento Seguro com PHP SQL Injection Ocorre quando um usuário malicioso experimenta obter informações sobre um banco de dados através de um formulário. Depois de conseguir conhecimento suficiente – geralmente das mensagens de erro do banco de dados – o atacante estará equipado para explorar o formulário para quaisquer possíveis vulnerabilidades através de injeção de SQL em campos do formulário. CONCLUSÃO: Filtre todos os dados que possam fazer parte de declarações SQL. Segurança de Banco de Dados
  15. 15. Desenvolvimento Seguro com PHP Session Fixation É possível configurar o identificador de sessão manualmente através de um literal de consulta, forçando o uso de uma sessão particular. Obtido geralmente pela criação de um link para sua aplicação e a adição do identificador que o atacante deseja dar a qualquer usuário que clicar no link. Enquanto o usuário acessa seu site através da sessão, ele pode fornecer informações sensíveis ou mesmo credenciais de login. O propósito do ataque é obter um alto nível de privilégio. CONCLUSÃO: Cada vez que um nível de acesso de usuário muda, é necessário regenerar o identificador de sessão. PHP faz disso uma tarefa simples com session_regenerate_id(). Segurança de Sessão
  16. 16. Desenvolvimento Seguro com PHP Session Hijacking Este é um termo genericamente usado para descrever quaisquer meios pelos quais um atacante obtenha um identificador de sessão válido (ou que forneça um de sua própria autoria). Pode ser contornado pela verificação de vários cabeçalhos da requisição enviados pelo cliente, através de parâmetros que não se alterem. Segurança de Sessão
  17. 17. Desenvolvimento Seguro com PHP Remote Code Injection Ocorre quando um atacante é capaz de fazer sua aplicação executar código PHP de seu escolha. Pode ser contornado com filtragem de dados. Segurança de Sistema de Arquivos
  18. 18. Desenvolvimento Seguro com PHP Command Injection O PHP provê grande poder com as funções exec(), system() e passthru(), bem como o operador ‘ (acento agudo). Elas não devem ser usadas levianamente, e é importante tomar grande cuidado em garantir que atacantes não possam injetar e executar comandos de sistema arbitrariamente. Pode ser contornado com filtragem de dados. Funções: escapeshellcmd() e escapeshellarg(). Segurança de Sistema de Arquivos
  19. 19. Desenvolvimento Seguro com PHP Mensagens de Erro são para o Desenvolvimento Desligue display_errors na produção. Use log_errors e error_log. Algumas Dicas Importantes
  20. 20. Desenvolvimento Seguro com PHP Use require ao invés de include require gera erros fatais e interrompe a aplicação. include reporta o erro e prossegue com a execução. Algumas Dicas Importantes
  21. 21. Desenvolvimento Seguro com PHP Criptografe os Dados Funções: MD5, SHA1, mcrypt, etc Algumas Dicas Importantes
  22. 22. Desenvolvimento Seguro com PHP Desligue magic_quotes_gpc Afeta a portabilidade (está ligada, está desligada?) Performance: todos os dados sofrem escaping. Inconveniência. Gera caracteres de escape onde não é necessário (por exemplo, e-mail). Será removido no PHP 6. Algumas Dicas Importantes
  23. 23. Desenvolvimento Seguro com PHP http://www.php.net/manual/pt_BR/security.php Onde obtenho ajuda?
  24. 24. Desenvolvimento Seguro com PHP Sugestão de Leitura
  25. 25. Desenvolvimento Seguro com PHP Perguntas ? www.fgsl.eti.br
  26. 26. Desenvolvimento Seguro com PHP Fim Obrigado

×