Este documento resume as principais técnicas de segurança do Zend Framework 2, incluindo filtragem de entrada, validação de dados, escape de saída, criptografia, controle de acesso e preparação de consultas para proteger aplicações PHP.
2. Sobre mim
Cyrille Grandval (@CyrilleGrandval)
• Z-Team member : Zend Evangelist
• Consultor PHP / Segurança desde 2000
• Professor / tutor em PHP e segurança das
aplicações web
• Palestrante internacional, autor de livros e
artigos técnicos
• Fundador da Darkmira França e Darkmira
Brasil
3. OWASP Top 10 2013
A1 - Injeção de código
A2 - Quebra de autenticação e
Gerenciamento de Sessão
A3 - Cross-Site Scripting (XSS)
A4 - Referência Insegura e Direta a
Objetos
A5 - Configuração Incorreta de
Segurança
A6 - Exposição de Dados Sensíveis
A7 - Falta de Função para Controle do
Nível de Acesso
A8 - Cross-Site Request Forgery (CSRF)
A9 - Utilização de Componentes
Vulneráveis Conhecidos
A10 - Redirecionamentos e
Encaminhamentos Inválidos
https://www.owasp.org/images/9/9c/OWASP_Top_10_2013_PT-BR.pdf
4. Lembrança
Uma configuração segura tem de ser definida, implementada e mantida
cada dia
• Não exiba as mensagens de erros do sistema / stacktrace
• Modificar os logins / senhas padrão das aplicações
• Manter a versão de PHP atualizada
• Manter os librairies atualizados
12. Filtrar
Existe vários filtros :
ZendFilterBlacklist
ZendFilterBoolean
ZendFilterCallback
ZendFilterDigits
ZendFilterDecrypt
ZendFilterEncrypt
ZendFilterHtmlEntities
ZendFilterPregReplace
ZendFilterStripTags
ZendFilterToInt
ZendFilterWhiteList
ZendI18nFilter* e muito mais
14. Filtrar
Para integrar em um formulário
• implementar o interface InputFilterProviderInterface
• criar um método publico getInputFilterSpecification
• especificar o filtro para o campo nesse método
15. Criar um filtro de entrada
• permite de definir uma coleção de filtros e validators
• pode ser aplicado sobre qualquer tipo de dados (formulários,
parâmetro GET, COOKIE, headers HTTP, …)
• contém um método isValid que verifica a validade dos dados
20. Validar
Para integrar em um formulário
• implementar o interface InputFilterProviderInterface
• criar um método publico getInputFilterSpecification
• especificar o validator para o campo nesse método
23. Logar
O componente ZendAuthentification fornece API para se conectar e
vários adapters são disponiveis :
• Database Table
• Digest
• HTTP
• LDAP
Você também pode criar o seu adapter.
24. Controlar acesso
Criar um Access Control List
• simple
• evolutivo
• facilmente auditável
• deny all por padrão
25. Controlar acesso
O que é um resource
• objeto ao qual o acesso é controlada
O que é um role
• objeto que pode pedir o acesso a um recurso
30. Criptografar
ZendCrypt permite implementar uma criptografia avançada e simple
• ZendCryptBlockCipher
• ZendCryptHash
• ZendCryptHmac
• ZendCryptKeyDerivation
• ZendCryptPassword
• ZendCryptPublicKey
• ZendCryptSymmetic
31. Criptografar com BlockCipher
ZendCryptBlockCipher usa o adapter Mcrypt
• usar para encrypt/decrypt dados sensiveis (symmetric encryption)
• gere também a autenticação HMAC
Métodos do API
• setKey($key)
• encrypt($data)
• decrypt($data)
36. Prepared Statement
Declarações preparadas que são armazenados no servidor de bancos de
dados
objetivo :
• executar consultas sem variação da sintaxe
• mudança apenas nos parâmetros
• velocidade na execução dos comandos SQL
• maior segurança pois os dados são identificados e escapados
39. Se manter informado
Para ter uma boa segurança, é preciso cuidar do desenvolvimento da sua
aplicação mas também das ferramentas usadas.
Se mantenha em alerta das falhas de segurança do Zend Framework 2
http://framework.zend.com/security/advisories/
40. Debug
Segurar é também criar uma aplicação sem comportamento anormal, sem
bug. Usar um debugguer ao invês de var_dump.
Zend fornece uma ferramenta de debug com o Zend Server : Z-Ray
• Baixa o new Z-Ray Standalone (não precisa do Zend Server) :
http://www.zend.com/en/products/z-ray/z-ray-preview
• Participe do novo Z-Ray Standalone com seu feedback :
https://docs.google.com/a/zend.com/forms/d/1xyg592SHOm5g1JJ5XLa
1KjgB1D0th5v7dGoMU1i2ZgU/viewform?usp=send_form