proteja sua aplicação com o zend framework 2
Post on 09-Jan-2017
697 Views
Preview:
TRANSCRIPT
Proteja sua aplicação com o Zend Framework 2PHPEste - João Pessoa - 03/10/2015
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ó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
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
Primeiro mantra
Think out of the box
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
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)
Componentes de segurança
• Zend\Authentification• Zend\Db• Zend\Captcha• Zend\Crypt• Zend\Escaper
• Zend\Filter• Zend\InputFilter• Zend\Permissions• Zend\Math• Zend\Validator
Segundo mantra
Filter input, escape output
Trustno
one
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
Filtrar
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
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
Criar um filtro de entrada
Usar um filtro de entrada
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
ValidarCada validator contém um método isValid
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
Escapar
Existe vários formatos :• escapeHTML()• escapeHTMLattr()• escapeUrl()• escapeJs()• escapeCss()
Escapar
Ou diretamente no viewecho $this->escapeHTML($this->message);
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.
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
Controlar acesso
Configurar as sessões
Configurar as sessões
Usar os validators para as sessões
Configurar as sessões
Regeração do ID de sessão contra a fixação
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
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)
Criptografar com BlockCipher
Password hash
Parar de usar• md5 ou sha1 com ou sem salt
Recomandado• bcrypt• scrypt
Criptografar com Bcrypt
Zend\Crypt\Password\BCrypt
Métodos do API• create($password)• verify($password, $hash)• setSalt($salt) • setCost($cost)
Criptografar com Bcrypt
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
Usar os prepared statement
Parâmetro anonimo
Parâmetro nomeado
Implementar um token
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/
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
Obrigado :-)Dê seu feedback no http://joind.in/event/view/4001
top related