proteja sua aplicação com o zend framework 2
TRANSCRIPT
![Page 1: Proteja sua aplicação com o zend framework 2](https://reader030.vdocuments.site/reader030/viewer/2022012907/58731eca1a28ab673e8b6fc1/html5/thumbnails/1.jpg)
Proteja sua aplicação com o Zend Framework 2PHPEste - João Pessoa - 03/10/2015
![Page 2: Proteja sua aplicação com o zend framework 2](https://reader030.vdocuments.site/reader030/viewer/2022012907/58731eca1a28ab673e8b6fc1/html5/thumbnails/2.jpg)
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
![Page 3: Proteja sua aplicação com o zend framework 2](https://reader030.vdocuments.site/reader030/viewer/2022012907/58731eca1a28ab673e8b6fc1/html5/thumbnails/3.jpg)
OWASP Top 10 2013
A1 - Injeção de códigoA2 - Quebra de autenticação e Gerenciamento de SessãoA3 - Cross-Site Scripting (XSS)A4 - Referência Insegura e Direta a ObjetosA5 - Configuração Incorreta de Segurança
A6 - Exposição de Dados SensíveisA7 - Falta de Função para Controle do Nível de AcessoA8 - Cross-Site Request Forgery (CSRF)A9 - Utilização de Componentes Vulneráveis ConhecidosA10 - Redirecionamentos e Encaminhamentos Inválidos
https://www.owasp.org/images/9/9c/OWASP_Top_10_2013_PT-BR.pdf
![Page 4: Proteja sua aplicação com o zend framework 2](https://reader030.vdocuments.site/reader030/viewer/2022012907/58731eca1a28ab673e8b6fc1/html5/thumbnails/4.jpg)
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
![Page 5: Proteja sua aplicação com o zend framework 2](https://reader030.vdocuments.site/reader030/viewer/2022012907/58731eca1a28ab673e8b6fc1/html5/thumbnails/5.jpg)
Primeiro mantra
Think out of the box
![Page 6: Proteja sua aplicação com o zend framework 2](https://reader030.vdocuments.site/reader030/viewer/2022012907/58731eca1a28ab673e8b6fc1/html5/thumbnails/6.jpg)
Think out of the box
Ligue cada tesouro!
ligar os 9 tesouros
4 linhas retas
sem retirar a caneta
1 2 3
4 5 6
7 8 9
![Page 7: Proteja sua aplicação com o zend framework 2](https://reader030.vdocuments.site/reader030/viewer/2022012907/58731eca1a28ab673e8b6fc1/html5/thumbnails/7.jpg)
Organização do código
• 1 diretório público sendo a raiz web• 1 front controller só : index.php• configurações :
• globais : *.global.php• locais : *.local.php -> (.gitignore)
![Page 8: Proteja sua aplicação com o zend framework 2](https://reader030.vdocuments.site/reader030/viewer/2022012907/58731eca1a28ab673e8b6fc1/html5/thumbnails/8.jpg)
Componentes de segurança
• Zend\Authentification• Zend\Db• Zend\Captcha• Zend\Crypt• Zend\Escaper
• Zend\Filter• Zend\InputFilter• Zend\Permissions• Zend\Math• Zend\Validator
![Page 9: Proteja sua aplicação com o zend framework 2](https://reader030.vdocuments.site/reader030/viewer/2022012907/58731eca1a28ab673e8b6fc1/html5/thumbnails/9.jpg)
Segundo mantra
Filter input, escape output
![Page 10: Proteja sua aplicação com o zend framework 2](https://reader030.vdocuments.site/reader030/viewer/2022012907/58731eca1a28ab673e8b6fc1/html5/thumbnails/10.jpg)
Trustno
one
![Page 11: Proteja sua aplicação com o zend framework 2](https://reader030.vdocuments.site/reader030/viewer/2022012907/58731eca1a28ab673e8b6fc1/html5/thumbnails/11.jpg)
![Page 12: Proteja sua aplicação com o zend framework 2](https://reader030.vdocuments.site/reader030/viewer/2022012907/58731eca1a28ab673e8b6fc1/html5/thumbnails/12.jpg)
Filtrar
Existe vários filtros : Zend\Filter\BlacklistZend\Filter\BooleanZend\Filter\CallbackZend\Filter\DigitsZend\Filter\DecryptZend\Filter\Encrypt
Zend\Filter\HtmlEntitiesZend\Filter\PregReplaceZend\Filter\StripTagsZend\Filter\ToIntZend\Filter\WhiteListZend\I18n\Filter\* e muito mais
![Page 13: Proteja sua aplicação com o zend framework 2](https://reader030.vdocuments.site/reader030/viewer/2022012907/58731eca1a28ab673e8b6fc1/html5/thumbnails/13.jpg)
Filtrar
![Page 14: Proteja sua aplicação com o zend framework 2](https://reader030.vdocuments.site/reader030/viewer/2022012907/58731eca1a28ab673e8b6fc1/html5/thumbnails/14.jpg)
FiltrarPara integrar em um formulário• implementar o interface InputFilterProviderInterface• criar um método publico getInputFilterSpecification• especificar o filtro para o campo nesse método
![Page 15: Proteja sua aplicação com o zend framework 2](https://reader030.vdocuments.site/reader030/viewer/2022012907/58731eca1a28ab673e8b6fc1/html5/thumbnails/15.jpg)
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
![Page 16: Proteja sua aplicação com o zend framework 2](https://reader030.vdocuments.site/reader030/viewer/2022012907/58731eca1a28ab673e8b6fc1/html5/thumbnails/16.jpg)
Criar um filtro de entrada
![Page 17: Proteja sua aplicação com o zend framework 2](https://reader030.vdocuments.site/reader030/viewer/2022012907/58731eca1a28ab673e8b6fc1/html5/thumbnails/17.jpg)
Usar um filtro de entrada
![Page 18: Proteja sua aplicação com o zend framework 2](https://reader030.vdocuments.site/reader030/viewer/2022012907/58731eca1a28ab673e8b6fc1/html5/thumbnails/18.jpg)
Zend\Validator\InArrayZend\Validator\LessThanZend\Validator\RegexpZend\Validator\StringLengthZend\Validator\UriZend\I18n\Validator\* e muito mais
Validar
Existe vários validators : Zend\Validator\Db\RecordExistsZend\Validator\CallbackZend\Validator\CreditCardZend\Validator\DigitsZend\Validator\EmailAddressZend\Validator\GreaterThan
![Page 19: Proteja sua aplicação com o zend framework 2](https://reader030.vdocuments.site/reader030/viewer/2022012907/58731eca1a28ab673e8b6fc1/html5/thumbnails/19.jpg)
ValidarCada validator contém um método isValid
![Page 20: Proteja sua aplicação com o zend framework 2](https://reader030.vdocuments.site/reader030/viewer/2022012907/58731eca1a28ab673e8b6fc1/html5/thumbnails/20.jpg)
ValidarPara integrar em um formulário• implementar o interface InputFilterProviderInterface• criar um método publico getInputFilterSpecification• especificar o validator para o campo nesse método
![Page 21: Proteja sua aplicação com o zend framework 2](https://reader030.vdocuments.site/reader030/viewer/2022012907/58731eca1a28ab673e8b6fc1/html5/thumbnails/21.jpg)
Escapar
Existe vários formatos :• escapeHTML()• escapeHTMLattr()• escapeUrl()• escapeJs()• escapeCss()
![Page 22: Proteja sua aplicação com o zend framework 2](https://reader030.vdocuments.site/reader030/viewer/2022012907/58731eca1a28ab673e8b6fc1/html5/thumbnails/22.jpg)
Escapar
Ou diretamente no viewecho $this->escapeHTML($this->message);
![Page 23: Proteja sua aplicação com o zend framework 2](https://reader030.vdocuments.site/reader030/viewer/2022012907/58731eca1a28ab673e8b6fc1/html5/thumbnails/23.jpg)
LogarO componente Zend\Authentification 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.
![Page 24: Proteja sua aplicação com o zend framework 2](https://reader030.vdocuments.site/reader030/viewer/2022012907/58731eca1a28ab673e8b6fc1/html5/thumbnails/24.jpg)
Controlar acesso
Criar um Access Control List• simple• evolutivo• facilmente auditável• deny all por padrão
![Page 25: Proteja sua aplicação com o zend framework 2](https://reader030.vdocuments.site/reader030/viewer/2022012907/58731eca1a28ab673e8b6fc1/html5/thumbnails/25.jpg)
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
![Page 26: Proteja sua aplicação com o zend framework 2](https://reader030.vdocuments.site/reader030/viewer/2022012907/58731eca1a28ab673e8b6fc1/html5/thumbnails/26.jpg)
Controlar acesso
![Page 27: Proteja sua aplicação com o zend framework 2](https://reader030.vdocuments.site/reader030/viewer/2022012907/58731eca1a28ab673e8b6fc1/html5/thumbnails/27.jpg)
Configurar as sessões
![Page 28: Proteja sua aplicação com o zend framework 2](https://reader030.vdocuments.site/reader030/viewer/2022012907/58731eca1a28ab673e8b6fc1/html5/thumbnails/28.jpg)
Configurar as sessões
Usar os validators para as sessões
![Page 29: Proteja sua aplicação com o zend framework 2](https://reader030.vdocuments.site/reader030/viewer/2022012907/58731eca1a28ab673e8b6fc1/html5/thumbnails/29.jpg)
Configurar as sessões
Regeração do ID de sessão contra a fixação
![Page 30: Proteja sua aplicação com o zend framework 2](https://reader030.vdocuments.site/reader030/viewer/2022012907/58731eca1a28ab673e8b6fc1/html5/thumbnails/30.jpg)
CriptografarZend\Crypt permite implementar uma criptografia avançada e simple
• Zend\Crypt\BlockCipher• Zend\Crypt\Hash• Zend\Crypt\Hmac• Zend\Crypt\Key\Derivation• Zend\Crypt\Password• Zend\Crypt\PublicKey• Zend\Crypt\Symmetic
![Page 31: Proteja sua aplicação com o zend framework 2](https://reader030.vdocuments.site/reader030/viewer/2022012907/58731eca1a28ab673e8b6fc1/html5/thumbnails/31.jpg)
Criptografar com BlockCipher
Zend\Crypt\BlockCipher 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)
![Page 32: Proteja sua aplicação com o zend framework 2](https://reader030.vdocuments.site/reader030/viewer/2022012907/58731eca1a28ab673e8b6fc1/html5/thumbnails/32.jpg)
Criptografar com BlockCipher
![Page 33: Proteja sua aplicação com o zend framework 2](https://reader030.vdocuments.site/reader030/viewer/2022012907/58731eca1a28ab673e8b6fc1/html5/thumbnails/33.jpg)
Password hash
Parar de usar• md5 ou sha1 com ou sem salt
Recomandado• bcrypt• scrypt
![Page 34: Proteja sua aplicação com o zend framework 2](https://reader030.vdocuments.site/reader030/viewer/2022012907/58731eca1a28ab673e8b6fc1/html5/thumbnails/34.jpg)
Criptografar com Bcrypt
Zend\Crypt\Password\BCrypt
Métodos do API• create($password)• verify($password, $hash)• setSalt($salt) • setCost($cost)
![Page 35: Proteja sua aplicação com o zend framework 2](https://reader030.vdocuments.site/reader030/viewer/2022012907/58731eca1a28ab673e8b6fc1/html5/thumbnails/35.jpg)
Criptografar com Bcrypt
![Page 36: Proteja sua aplicação com o zend framework 2](https://reader030.vdocuments.site/reader030/viewer/2022012907/58731eca1a28ab673e8b6fc1/html5/thumbnails/36.jpg)
Prepared StatementDeclarações preparadas que são armazenados no servidor de bancos de dadosobjetivo : • 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
![Page 37: Proteja sua aplicação com o zend framework 2](https://reader030.vdocuments.site/reader030/viewer/2022012907/58731eca1a28ab673e8b6fc1/html5/thumbnails/37.jpg)
Usar os prepared statement
Parâmetro anonimo
Parâmetro nomeado
![Page 38: Proteja sua aplicação com o zend framework 2](https://reader030.vdocuments.site/reader030/viewer/2022012907/58731eca1a28ab673e8b6fc1/html5/thumbnails/38.jpg)
Implementar um token
![Page 39: Proteja sua aplicação com o zend framework 2](https://reader030.vdocuments.site/reader030/viewer/2022012907/58731eca1a28ab673e8b6fc1/html5/thumbnails/39.jpg)
Se manter informadoPara 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/
![Page 40: Proteja sua aplicação com o zend framework 2](https://reader030.vdocuments.site/reader030/viewer/2022012907/58731eca1a28ab673e8b6fc1/html5/thumbnails/40.jpg)
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/1xyg592SHOm5g1JJ5XLa1KjgB1D0th5v7dGoMU1i2ZgU/viewform?usp=send_form
![Page 41: Proteja sua aplicação com o zend framework 2](https://reader030.vdocuments.site/reader030/viewer/2022012907/58731eca1a28ab673e8b6fc1/html5/thumbnails/41.jpg)
Obrigado :-)Dê seu feedback no http://joind.in/event/view/4001