Segurança em PHP - Blinde seu código de você mesmo!

7.196 visualizações

Publicada em

Palestra apresentada por mim no PHPSC 2012 em São José, na Univali. Palestra de nível básico mas que tem algumas dicas bastante legais!

Publicada em: Tecnologia
1 comentário
2 gostaram
Estatísticas
Notas
Sem downloads
Visualizações
Visualizações totais
7.196
No SlideShare
0
A partir de incorporações
0
Número de incorporações
5
Ações
Compartilhamentos
0
Downloads
164
Comentários
1
Gostaram
2
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide
  • Antes de iniciar… fica a pergunta: passa para o próximo slide
  • Próximo: Por onde começar?
  • No próximo slide tem o exemplo sobre carregar arquivos via get
  • Não é a maior falha de segurança, porém é muito importante que você se preocupe em não mostrar seus arquivos e muito menos impedir que usuários tenham acesso direto a arquivos de script e outros
  • Não é a maior falha de segurança, porém é muito importante que você se preocupe em não mostrar seus arquivos e muito menos impedir que usuários tenham acesso direto a arquivos de script e outros
  • No próximo slide tem o exemplo sobre carregar arquivos via get
  • No próximo slide tem o exemplo sobre carregar arquivos via get
  • Segurança em PHP - Blinde seu código de você mesmo!

    1. 1. Segurança em PHPBlinde seu código de você mesmo!
    2. 2. @gustavodasnevesfacebook.com/gustavo.nevesgngustavo.masterstudioweb.comwww.gustavoneves.com
    3. 3. Sua aplicação é segura?
    4. 4. Simplicidade != vulnerabilidade PHP é “fácil” de aprender? SIM! PHP é a “primeira linguagem” de muitos desenvolvedores? SIM Devido a estes fatos, muitas aplicações possuem vulnerabilidades consideradas básicas. Mas que podem dar muita dor de cabeça!
    5. 5. Por onde começar?
    6. 6. Planejamento“Prevenir é melhor do que remediar” Leve em consideração falhas de segurança; Não deixe para pensar em segurança depois de tudo pronto; Crie um fluxograma ou mapa mental das entradas fornecidas pelo usuário e verifique onde podem ser interceptadas;
    7. 7. Procure boa documentação efontes de pesquisas PHP.NET (The Best) OWASP.org (*top 10) PHPSEC.org (*artigos) FORUM-SEGURANÇA.com
    8. 8. Vamos ao que interessa!
    9. 9. Mostrando erros Configurações relacionadas a exibição de erros:  error_reporting() – nível de erro a ser reportado. Padrão: E_ALL ^ E_NOTICE  display_errors: exibir ou não erros na tela  Em produção, deve ser sempre desabilitada  log_errors: fazer log dos erros em arquivos  error_log: arquivo onde será feito o log
    10. 10. Manipulando erros set_error_handler() – permite usar uma função própria para o tratamento de erros  set_exception_handler()
    11. 11. TODA ENTRADA DEVE SER FILTRADA ETODA SAÍDA DEVE SER ”ESCAPADA”
    12. 12. Filtrando as entradasfilter_input()
    13. 13. Problemas comunsem aplicações
    14. 14. Cuidados com sua URL Práticas de SEO lhe ajudarão no combate a SQL Injection!
    15. 15. http:/meusite.com.br/?pagina=produtos.php&id=12 ouhttp://meusite.com.br/produtos/miniatura-sheldon-cooperURLS amigáveis ajudam bastante por conta da“validação” que o .HTACCESS pode fazer para vocêatravés de expressões regulares, resultando erro 404 aoinvés de fazer a requisição para seus arquivos .PHP
    16. 16. SQL InjectionO lado negro da força
    17. 17. O Que é? Injeção de instruções sql normalmente em campos de formulário com o intuito de conseguir acesso a informações ou alterações na base de dados.Como evitar ou corrigir? Simples: Como quase todas as falhas de segurança, basta filtrar entradas e escapar saídas
    18. 18.  Nunca conecte ao banco de dados como um super-usuário (root), sempre utilize usuários personalizados, sem que tenha acesso a tudo do banco. O PHP oferece diversas funções para evitar ataques por SQL injection: mysql_real_escape_string(), sqlite_escape_string(), addslashes() e str_replace(), PDO:quote().
    19. 19. Confiar no usuárioTrate os dados e reze para que ele não seja “malandro” demais 
    20. 20. Veja esta singela mensagem de erro: Hey Sheldon, sua senha está incorreta!*Não informe dados de usuários ou da aplicação em mensagens de erro!
    21. 21. CriptografiaEmbaralhe, embaralhe e embaralhe
    22. 22. Aplicando criptografia• Extensões de criptografia php (algumas): • Hash • Mcrypt • OpenSSLSHA-1 é praticamente idêntico ao md5, só que tem 160 bits, oque acaba criando uma string-resultado maior (40 char.)Aplicando:$string = O rato roeu a ropa do rei de Roma’;$codificada = sha1($string);echo "Resultado da codificação usando sha1: " . $codificada;// b186b709f7cf5a1d98d413379a66e511df8d59a4
    23. 23. $_REQUEST nunca mais! Utilize adequadamente $_GET,$_POST e $_COOKIE; Esta técnica XGH não vai melhorar em nada sua vida ;) *XGH = Xtreme Go Horse Process
    24. 24.  Não passe informações importantes por GET Trate todo e qualquer dado que você utilize para tomar decisões ou exibir informações da base de dados Visualize as possíveis brechas de segurança e implemente uma solução simples para elas. Não reinvente a roda. Utilize um framework sempre que possível (normalmente já implementada a camada de segurança) Utilize um bom anti-vírus
    25. 25. Para finalizar:Nenhuma aplicação é 100% segura! 
    26. 26. OBRIGADO! Ficou com dúvidas?Entre em contato pelo twitter @gustavodasneves

    ×