segurança em php - blinde seu código de você mesmo!

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

Upload: gustavo-neves

Post on 11-Jun-2015

5.688 views

Category:

Technology


1 download

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!

TRANSCRIPT

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