Palestra no PHPEste, dia 3/10 em João Pessoa sobre o Zend Framework 2 e a Segurança. Proteja sua aplicação usando os bons componentes do Zend Framework e a boa configuração
Zend evangelist, professeur et formateur en Sécurité Web & PHP / Fondateur de Darkmira & Darkmira Brasil à ESGI, la grande école informatique à Paris de Bac à Bac+5
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
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
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
Filtrar
Existe vários filtros :
ZendFilterBlacklist
ZendFilterBoolean
ZendFilterCallback
ZendFilterDigits
ZendFilterDecrypt
ZendFilterEncrypt
ZendFilterHtmlEntities
ZendFilterPregReplace
ZendFilterStripTags
ZendFilterToInt
ZendFilterWhiteList
ZendI18nFilter* e muito mais
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
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
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
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.
Controlar acesso
Criar um Access Control List
• simple
• evolutivo
• facilmente auditável
• deny all por padrão
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
Criptografar
ZendCrypt permite implementar uma criptografia avançada e simple
• ZendCryptBlockCipher
• ZendCryptHash
• ZendCryptHmac
• ZendCryptKeyDerivation
• ZendCryptPassword
• ZendCryptPublicKey
• ZendCryptSymmetic
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)
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
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/
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