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

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

Embed Size (px)

DESCRIPTION

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!

Citation preview

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

Segurança em PHPBlinde seu código de você mesmo!

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

@gustavodasneves

facebook.com/gustavo.nevesgn

gustavo.masterstudioweb.com

www.gustavoneves.com

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

Sua aplicação é segura?

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

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!

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

Por onde começar?

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

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;

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

Procure boa documentação e fontes de pesquisas

PHP.NET (The Best)

OWASP.org (*top 10)

PHPSEC.org (*artigos)

FORUM-SEGURANÇA.com

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

Vamos ao que interessa!

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

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

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

Manipulando errosset_error_handler() – permite usar uma função

própria para o tratamento de erros

set_exception_handler()

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

TODA ENTRADA DEVE SER FILTRADA E TODA SAÍDA DEVE SER ”ESCAPADA”

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

filter_input()

Filtrando as entradas

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

Problemas comuns em aplicações

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

Cuidados com sua URLPráticas de SEO lhe ajudarão

no combate a SQL Injection!

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

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

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

SQL InjectionO lado negro da força

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

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

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

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().

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

Confiar no usuárioTrate os dados e reze para que ele não seja

“malandro” demais

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

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!

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

CriptografiaEmbaralhe, embaralhe e embaralhe

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

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

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

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!

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

Dicas “quentes”

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

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

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

Para finalizar:

Nenhuma aplicação é 100% segura!

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

OBRIGADO!

Ficou com dúvidas? Entre em contato pelo twitter

@gustavodasneves