41
Proteja sua aplicação com o Zend Framework 2 PHPEste - João Pessoa - 03/10/2015

Proteja sua aplicação com o zend framework 2

Embed Size (px)

Citation preview

Page 1: Proteja sua aplicação com o zend framework 2

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

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

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

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

Primeiro mantra

Think out of the box

Page 6: Proteja sua aplicação com o zend framework 2

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

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

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

Segundo mantra

Filter input, escape output

Page 10: Proteja sua aplicação com o zend framework 2

Trustno

one

Page 11: Proteja sua aplicação com o zend framework 2
Page 12: Proteja sua aplicação com o zend framework 2

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

Filtrar

Page 14: Proteja sua aplicação com o zend framework 2

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

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

Criar um filtro de entrada

Page 17: Proteja sua aplicação com o zend framework 2

Usar um filtro de entrada

Page 18: Proteja sua aplicação com o zend framework 2

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

ValidarCada validator contém um método isValid

Page 20: Proteja sua aplicação com o zend framework 2

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

Escapar

Existe vários formatos :• escapeHTML()• escapeHTMLattr()• escapeUrl()• escapeJs()• escapeCss()

Page 22: Proteja sua aplicação com o zend framework 2

Escapar

Ou diretamente no viewecho $this->escapeHTML($this->message);

Page 23: Proteja sua aplicação com o zend framework 2

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

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

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

Controlar acesso

Page 27: Proteja sua aplicação com o zend framework 2

Configurar as sessões

Page 28: Proteja sua aplicação com o zend framework 2

Configurar as sessões

Usar os validators para as sessões

Page 29: Proteja sua aplicação com o zend framework 2

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

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

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

Criptografar com BlockCipher

Page 33: Proteja sua aplicação com o zend framework 2

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

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

Criptografar com Bcrypt

Page 36: Proteja sua aplicação com o zend framework 2

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

Usar os prepared statement

Parâmetro anonimo

Parâmetro nomeado

Page 38: Proteja sua aplicação com o zend framework 2

Implementar um token

Page 39: Proteja sua aplicação com o zend framework 2

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

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

Obrigado :-)Dê seu feedback no http://joind.in/event/view/4001