Publicité
Publicité

Contenu connexe

Publicité

Proteja sua aplicação com o zend framework 2

  1. Proteja sua aplicação com o Zend Framework 2 PHPEste - João Pessoa - 03/10/2015
  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
  5. Primeiro mantra Think out of the box
  6. 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
  7. 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)
  8. Componentes de segurança • ZendAuthentification • ZendDb • ZendCaptcha • ZendCrypt • ZendEscaper • ZendFilter • ZendInputFilter • ZendPermissions • ZendMath • ZendValidator
  9. Segundo mantra Filter input, escape output
  10. Trust no one
  11. Filtrar Existe vários filtros : ZendFilterBlacklist ZendFilterBoolean ZendFilterCallback ZendFilterDigits ZendFilterDecrypt ZendFilterEncrypt ZendFilterHtmlEntities ZendFilterPregReplace ZendFilterStripTags ZendFilterToInt ZendFilterWhiteList ZendI18nFilter* e muito mais
  12. Filtrar
  13. 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
  14. 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
  15. Criar um filtro de entrada
  16. Usar um filtro de entrada
  17. ZendValidatorInArray ZendValidatorLessThan ZendValidatorRegexp ZendValidatorStringLength ZendValidatorUri ZendI18nValidator* e muito mais Validar Existe vários validators : ZendValidatorDbRecordExists ZendValidatorCallback ZendValidatorCreditCard ZendValidatorDigits ZendValidatorEmailAddress ZendValidatorGreaterThan
  18. Validar Cada validator contém um método isValid
  19. 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
  20. Escapar Existe vários formatos : • escapeHTML() • escapeHTMLattr() • escapeUrl() • escapeJs() • escapeCss()
  21. Escapar Ou diretamente no view echo $this->escapeHTML($this->message);
  22. 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.
  23. Controlar acesso Criar um Access Control List • simple • evolutivo • facilmente auditável • deny all por padrão
  24. 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
  25. Controlar acesso
  26. Configurar as sessões
  27. Configurar as sessões Usar os validators para as sessões
  28. Configurar as sessões Regeração do ID de sessão contra a fixação
  29. Criptografar ZendCrypt permite implementar uma criptografia avançada e simple • ZendCryptBlockCipher • ZendCryptHash • ZendCryptHmac • ZendCryptKeyDerivation • ZendCryptPassword • ZendCryptPublicKey • ZendCryptSymmetic
  30. 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)
  31. Criptografar com BlockCipher
  32. Password hash Parar de usar • md5 ou sha1 com ou sem salt Recomandado • bcrypt • scrypt
  33. Criptografar com Bcrypt ZendCryptPasswordBCrypt Métodos do API • create($password) • verify($password, $hash) • setSalt($salt) • setCost($cost)
  34. Criptografar com Bcrypt
  35. 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
  36. Usar os prepared statement Parâmetro anonimo Parâmetro nomeado
  37. Implementar um token
  38. 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/
  39. 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
  40. Obrigado :-) Dê seu feedback no http://joind.in/event/view/4001

Notes de l'éditeur

  1. setBinaryOutput(true) pour transformer le base64 en binaire
Publicité