desenvolvendo com segurança em php
TRANSCRIPT
SEGURANÇA EM PHPAugusto Pascutti
Friday, January 29, 2010
Augusto Pascutti
4 anos de experiência
Zend Certified Engineer
Co-Fundador PHPSP
Host PHPSPCast
Habari,CakePHP
Friday, January 29, 2010
Segurança
Friday, January 29, 2010
Princípios
Se mantenha a eles e você terá:
Um usuário feliz
Um patrão feliz
Finais de Semana e quem sabe férias
Friday, January 29, 2010
Segurança é ...
Friday, January 29, 2010
como um ogro ...
Friday, January 29, 2010
Que são como cebolas !
Friday, January 29, 2010
Segurança em camadas
Segurança nunca é demais
Segurança em profundidade
Aplique camadas de segurança em tudo que puder
Não conte com a bondade no mundo
Friday, January 29, 2010
Informação Confidencial
Friday, January 29, 2010
Informação Confidencial
Classifique tudo que for sensível
Impeça o acesso a essa informação
Lei do menor privilégio
Se o usuário não precisa ver, não deixe.
Friday, January 29, 2010
Segurança x Usabilidade
Shozu.com
Friday, January 29, 2010
Segurança x Usabilidade
reCaptcha
Friday, January 29, 2010
Segurança x Usabilidade
Procure implementar segurança transparente ao usuário
Se não for possível:
Pense no Risco e na Usabilidade
Tenha em mente que dependemos de usuários felizes
NUNCA esqueça da usabilidade
Friday, January 29, 2010
Segurança x Usabilidade
Qual o animal da figura ?
Friday, January 29, 2010
Vigie sempre
Nunca confie no usuário
Nunca confie em outras aplicações
Nunca confie.
Mantenha registro da onde, de quem e quando a informação for gerada
Friday, January 29, 2010
Filtre o INPUT
Identifique o input
Filtre o input
Friday, January 29, 2010
Identificando Input
O input pode vir de diversos lugares
Formulário
Outra aplicação
Sistema
Friday, January 29, 2010
Filtrando
Friday, January 29, 2010
Filtrando
Friday, January 29, 2010
Filtrando
Friday, January 29, 2010
Filtrando
Friday, January 29, 2010
Filtrando
Friday, January 29, 2010
Filtrando
Friday, January 29, 2010
Filtrando
Friday, January 29, 2010
Filtrando
Friday, January 29, 2010
Filtrando
Friday, January 29, 2010
Escape o Output
O que é output ?
echo, print, sprintf
<?=
Na grande maioria, o destino é o navegador
Escapar HTML
Friday, January 29, 2010
Escape o Output
Friday, January 29, 2010
Escape o Output
Friday, January 29, 2010
Escape o Output
Friday, January 29, 2010
htmlentities()Converte TODO caractere para entidade HTML correspondente
Segundo e terceiro parâmetro são opcionais
Segundo: como as aspas (duplas e simples) seão tratadas
Padrão: ENT_COMPAT
ENT_QUOTES: Converte ambas para entidade HTML
Terceiro: encoding do output
Padrão: ISO-8859-1
Friday, January 29, 2010
Escape o Output
Friday, January 29, 2010
Brindes
Extensão dos arquivos sempre “.php”
Dentro do DocRoot, só o necessário
Mantenha seu código simples e encapsulado
Favoreça Orientação a Objetos
Friday, January 29, 2010
TOP 10 OWASPLista de riscos de Segurança (rc1) de 2010
InjectionXSSQuebra de Autenticação e Problemas de SessõesReferências não seguras a ObjetosCSRFErros de ConfiguraçãoFalhas ao restringir acesso a URLsRedirecionamentos e Encaminhamentos não segurosMétodos de criptografia não segurosSegurança insuficiente no transporte de dados
Friday, January 29, 2010
Sql Injection
O que é ?
Envio de comandos não tratados pela aplicação para o interpretador
Impacto
Toda a base de dados pode ser lida ou modificada
Pode garantir acesso ao banco de dados ou até ao Sistema Operacional
Friday, January 29, 2010
Cross Site Scripting (XSS)
O que é ?
Dados do atacante são enviados ao navegador do cliente
Impacto
Roubo de sessão, de dados sensíveis, phishing
Friday, January 29, 2010
Cross Site Request Forgery (CSRF)
O que é ?
O navegador é “enganado” e envia um comando a um site vulnerável
Impacto
Iniciar transações (tranferência, logout, cancelamento)
Acesso sensível a dados
Mudança de dados da conta
Friday, January 29, 2010
CSRF
Friday, January 29, 2010
CSRF
Friday, January 29, 2010
CSRF
<img src="http://loja/comprar.php?quant=100" />
Friday, January 29, 2010
CSRF
Friday, January 29, 2010
CSRF
Friday, January 29, 2010
CSRF
Friday, January 29, 2010
Problemas de Configuração
O que é ?
Configuração de rede e do servidor de aplicação
Impacto
Acesso ao Sistema Operacional através de um problema conhecido
Acesso a dados da aplicação
Friday, January 29, 2010
allow_url_fopen
Permite acesso a recursos remotos
Valor padrão: On
Aliado ao ‘allow_url_include’ (> 5.2) é muito perigoso
Friday, January 29, 2010
allow_url_fopen
$conteudo = file_get_contents(“http://www.google.com”)
Friday, January 29, 2010
allow_url_fopen
include “http://www.bad-bad-site.com”
Friday, January 29, 2010
register_globals
Exporta índices de super globais para variáveis comuns
Impede que se identifique a origem do dado
Padrão
< 4.2: On
>4.2: Off
Friday, January 29, 2010
register_globals
Friday, January 29, 2010
register_globals
Friday, January 29, 2010
register_globals
Friday, January 29, 2010
magic_quotes_gpc
Escapa todos os dados em $_GET, $_POST e $_COOKIE
Usa addslashes() e não escape nativo do seu banco
Complica seu algoritmo de filtro
Padrão: On
Obsoleto no PHP 5.3
Removido do PHP 6
Friday, January 29, 2010
display_errors
Exibe no output erros do PHP
DEVE ser usado no desenvolvimento
DEVE ser desligado na produção
Padrão: On
Friday, January 29, 2010
error_reporting
Controla os níveis de erros que devem ser exibidos
Ajuda na identificação de erros e boas práticas
Recomendado: -1
Friday, January 29, 2010
safe_mode
Restringe algumas funcões tidas como prejudiciais
Verifica se o dono do arquivo a ser executado é o mesmo do script em execução
Melhora a segurança
Não é suficiente
Padrão: Off
Friday, January 29, 2010
Acesso a URLs Restritas
O que é?
Permitir que um usuário possa forjar uma autorização a uma URL sensível
Impacto
Permitir ações privilegiadas a qualquer pessoa
Friday, January 29, 2010
Redirecionamentos Inválidos
O que é?
Enviar o usuário para uma URL não valida
Impacto
Phishing
Friday, January 29, 2010
Criptografia Não SeguraO que é?
Falha na identificação de todos os dados que devem ser criptografados
Uso de criptografia não segura (md5, sha1)
Impacto
Acesso a dados sensíveis
Solução
mcrypt
Friday, January 29, 2010
Transporte de dados
O que é?
Falta de segurança na troca de informações sensíveis
Impacto
Acesso a dados sensíveis
Solução
SSL ou TLS para transporte dos dados
Friday, January 29, 2010
Perguntas ?
Augusto Pascutti
@augustohp
Friday, January 29, 2010
Referências
Essential PHP Security - Chris Chiflett - O’Reilly
http://www.owasp.org/
http://phpsp.org.br/category/phpsp/phpspcast/
Segurança em PHP - Márcio Pessoa - Novatec
Friday, January 29, 2010