O documento discute princípios e boas práticas de segurança em PHP, incluindo aplicar camadas de segurança, classificar e restringir acesso a informações confidenciais, escapar inputs e outputs, configurar corretamente o servidor PHP e evitar vulnerabilidades como SQL injection, XSS e CSRF.
8. 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
13. 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
15. 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
31. 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
33. 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
34. TOP 10 OWASP
Lista de riscos de Segurança (rc1) de 2010
Injection
XSS
Quebra de Autenticação e Problemas de Sessões
Referências não seguras a Objetos
CSRF
Erros de Configuração
Falhas ao restringir acesso a URLs
Redirecionamentos e Encaminhamentos não seguros
Métodos de criptografia não seguros
Segurança insuficiente no transporte de dados
35. 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
36. 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
37. 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
44. 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
52. 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
55. 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
56. 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
58. Criptografia Não Segura
O 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
59. 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
60. Perguntas ?
Augusto Pascutti
augusto@phpsp.org.br
@augustohp
61. 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