Segurança em PHP - Blinde seu código de você mesmo!
-
Upload
gustavo-neves -
Category
Technology
-
view
5.689 -
download
1
description
Transcript of Segurança em PHP - Blinde seu código de você mesmo!
Segurança em PHPBlinde seu código de você mesmo!
@gustavodasneves
facebook.com/gustavo.nevesgn
gustavo.masterstudioweb.com
www.gustavoneves.com
Sua aplicação é segura?
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!
Por onde começar?
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;
Procure boa documentação e fontes de pesquisas
PHP.NET (The Best)
OWASP.org (*top 10)
PHPSEC.org (*artigos)
FORUM-SEGURANÇA.com
Vamos ao que interessa!
Mostrando erros
Configurações relacionadas a exibição de erros:error_reporting() – nível de erro a ser
reportado. Padrão: E_ALL ^ E_NOTICEdisplay_errors: exibir ou não erros na tela
Em produção, deve ser sempre desabilitadalog_errors: fazer log dos erros em arquivoserror_log: arquivo onde será feito o log
Manipulando errosset_error_handler() – permite usar uma função
própria para o tratamento de erros
set_exception_handler()
TODA ENTRADA DEVE SER FILTRADA E TODA SAÍDA DEVE SER ”ESCAPADA”
filter_input()
Filtrando as entradas
Problemas comuns em aplicações
Cuidados com sua URLPráticas de SEO lhe ajudarão
no combate a SQL Injection!
http:/meusite.com.br/?pagina=produtos.php&id=12
URLS 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 ao invés de fazer a requisição para seus arquivos .PHP
ouhttp://meusite.com.br/produtos/miniatura-sheldon-
cooper
SQL InjectionO lado negro da força
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
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().
Confiar no usuárioTrate os dados e reze para que ele não seja
“malandro” demais
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!
CriptografiaEmbaralhe, embaralhe e embaralhe
Aplicando criptografia• Extensões de criptografia php (algumas):
• Hash
• Mcrypt
• OpenSSL
SHA-1 é praticamente idêntico ao md5, só que tem 160 bits, o que 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
Utilize adequadamente $_GET,$_POST e $_COOKIE;
Esta técnica XGH não vai melhorar em nada sua vida ;)
*XGH = Xtreme Go Horse Process
$_REQUEST nunca mais!
Dicas “quentes”
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
Para finalizar:
Nenhuma aplicação é 100% segura!
OBRIGADO!
Ficou com dúvidas? Entre em contato pelo twitter
@gustavodasneves