O documento discute princípios e técnicas de segurança em PHP, incluindo aplicar camadas de segurança, classificar informações confidenciais, filtrar inputs, escapar outputs, e configurações de segurança como register_globals e magic_quotes_gpc.
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
Friday, January 29, 2010
10. 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
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
Friday, January 29, 2010
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
Friday, January 29, 2010
16. Filtre o INPUT
Identifique o input
Filtre o input
Friday, January 29, 2010
17. Identificando Input
O input pode vir de diversos lugares
Formulário
Outra aplicação
Sistema
Friday, January 29, 2010
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
Friday, January 29, 2010
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
Friday, January 29, 2010
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
Friday, January 29, 2010
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
Friday, January 29, 2010
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
Friday, January 29, 2010
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
Friday, January 29, 2010
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
Friday, January 29, 2010
45. 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
46. allow_url_fopen
$conteudo = file_get_contents(“http://www.google.com”)
Friday, January 29, 2010
47. allow_url_fopen
include “http://www.bad-bad-site.com”
Friday, January 29, 2010
48. 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
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
Friday, January 29, 2010
53. 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
54. 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
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
Friday, January 29, 2010
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
Friday, January 29, 2010
57. Redirecionamentos Inválidos
O que é?
Enviar o usuário para uma URL não valida
Impacto
Phishing
Friday, January 29, 2010
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
Friday, January 29, 2010
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
Friday, January 29, 2010
60. Perguntas ?
Augusto Pascutti
augusto@phpsp.org.br
@augustohp
Friday, January 29, 2010
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
Friday, January 29, 2010