desenvolvimento em código seguro para php com zend framework
DESCRIPTION
Palestra proferida no XI FISL em 2010.TRANSCRIPT
Desenvolvimento de Código Seguro em PHP com Zend Framework
www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.
Quem sou eu?
www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.
agenda
● Segurança● Poder e responsabilidade● Princípios de Segurança● Toda entrada está contaminada - filtre● Anule efeitos indesejados na saída● Evite ataques CSRF● Segurança entre o banco de dados e aplicação● Autenticação● Autorização
www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.
Segurança
www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.
Fonte: http://mlpeters.com/The%20Shadow.jpg
QUEM SABE O MAL QUE SE ESCONDE
NO CORAÇÃO DOS HOMENS?
O Sombra é uma marca registrada da DC Comics (http://www.dccomics.com).
Segurança
www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.
Perguntas:
● A segurança é uma opção?
● Podemos ter segurança total?
● Soluções de segurança têm efeito permanente?
● Segurança custa pouco?
Segurança
www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.
Respostas
● A segurança nunca será suficiente.
● A segurança custa caro.
● A segurança não garante nenhum retorno, mas sua falta pode causar prejuízos.
● Sistemas mais seguros = menos amigáveis (e às vezes menos performáticos)
Segurança
www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.
PHP é seguro?
Poder e Responsabilidade
www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.
Hulk é uma marca registrada da Marvel (www.marvel.com). Todos os direitos reservados.
oferece um rico conjunto de ferramentas com imenso
PODERPODER
Poder e Responsabilidade
www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.
PODERPODERque usado com cuidado, serve para criar
aplicações complexas e robustas...
...mas que também pode ser usado por usuários maliciosos para atacar aplicações de diversos modos.
Poder e Responsabilidade
www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.
Fênix e Fênix Negra são marcas registradas da Marvel (www.marvel.com). Todos os direitos reservados.
Ou seja, o HEROI pode se tornar o VILÃO
Poder e Responsabilidade
www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.
A maior vulnerabilidade do PHP
http://faculty.mdc.edu/slewis/Inmates%20and%20Friends_files/Computer%20Nerd.jpg
Princípios de Segurança
www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.
1)A aplicação não sabe onde e quando será atacada.
2)A aplicação só pode se defender de ataques conhecidos.
3)A aplicação tem que vigiar o tempo todo.
4)A aplicação tem que respeitar as regras (a menos que tenha sido feita pelo Batman).
Batman é marca registradas da DC Comics (www.dccomics.com). Todos os direitos reservados.
Princípios de Segurança
www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.
POR OUTRO LADO...
1)O invasor pode escolher o ponto mais fraco.
2)O invasor pode investigar vulnerabilidades desconhecidas.
3)O invasor pode atacar a qualquer momento.
4)O invasor pode jogar sujo.
Princípios de Segurança
www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.
OU SEJA, VOCÊ ESTÁ
NA SEGUINTE SITUAÇÃO:
Duende Verde é marca registradas da Marvel (www.marvel.com). Todos os direitos reservados.
Dilema do DefensorX
Vantagem do Invasor
Princípios de Segurança
www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.
Alguns aspectos para se preocupar:
●Os dados que entram...●Os dados que saem...●O acesso à aplicação...●As permissões para cada recurso...●A manipulação do banco de dados...●E não pára por aí...
Princípios de Segurança
www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.
Conclusão: você precisa de ajuda para implementar segurança nas aplicações
Princípios de Segurança
www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.
Como seria maravilhoso se houvesse algo que ajudasse a tornar minha aplicação PHP mais segura... mas deve ser um sonho...
Imagem da série Head First. O'Reilly Media.
Princípios de Segurança
www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.
Imagem da série Head First. O'Reilly Media.
Princípios de Segurança
www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.
Zend Framework ajuda a lidar com aspectos
de código seguro!
Imagem da série Head First. O'Reilly Media.
Princípios de Segurança
www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.
v
M
CControlador Frontal
HTTP
REQUEST
A segurança começa na aquitetura!
Princípios de Segurança
www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.
A segurança começa na arquitetura!
APLICAÇÃO
CONTROLADOR FRONTAL
CASTELO DE BODIAM, SUSSEX, INGLATERRASéculo XIV
Princípios de Segurança
www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.
Mas isso é suficiente?
Homer Simpson é uma marca registrada do grupo Fox
Toda entrada está contaminada - filtre
Motoqueiro Fanstasma é marca registradas da Marvel (www.marvel.com). Todos os direitos reservados.
NEM PENSE EM USAR REGISTER GLOBALS
Toda entrada está contaminada - filtre
Fonte: http://img.vivaolinux.com.br/imagens/artigos/comunidade/usuario.jpg
Fonte: http://victorywebproductions.com/images/website1.jpg
Toda entrada está contaminada - filtre
Fonte: http://www.weno.com.br/blog/archives/capeta_pintor.gif
Fonte: http://victorywebproductions.com/images/website1.jpg
Toda entrada está contaminada - filtre
Fonte: http://www.weno.com.br/blog/archives/capeta_pintor.gif
Fonte: http://victorywebproductions.com/images/website1.jpg
Zend_Filter_Input
Anule efeitos indesejados na saída
BANCO DE DADOS
APLICAÇÃO
Fonte: http://1.bp.blogspot.com
Anule efeitos indesejados na saída
BANCO DE DADOS
APLICAÇÃO
Fonte: http://www.plurall.com/blogs/roosevelt/wp-content/uploads/2009/08/fake_smile_by_shittyliquor.jpg
Anule efeitos indesejados na saída
BANCO DE DADOS
APLICAÇÃO
Fonte 1: http://www.plurall.com/blogs/roosevelt/wp-content/uploads/2009/08/fake_smile_by_shittyliquor.jpg
Fonte 2: http://1.bp.blogspot.com
Zend_View
Evite ataques CSRF
Evite ataques CSRF
Evite ataques CSRF
<form action=”algumacoisa.com/fazer.php”>
Evite ataques CSRF
Zend_FormZend_Filter Zend_Validate
Segurança entre o banco de dados e a aplicação
Segurança entre o banco de dados e a aplicação
http://www.gambiarra.com.br/apagar.php?id=42
$id = $_GET['id'];
$sql = 'DELETE FROM STUDENTS WHERE ID = '.$id;
pg_query($connection, $sql);
Segurança entre o banco de dados e a aplicação
http://www.coisacerta.com.br/controller/apagar/id/42
$id = $this->getRequest()->getParam('id');
$table->delete($table->getAdapter()->quoteInto('ID = ?',$id));
Segurança entre o banco de dados e a aplicação
www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.
Shrek é uma marca registrada da Dreamworks (http://www.dreamworksanimation.com). Todos os direitos reservados.
SEGURANÇA É COMO UMA CEBOLA...
Segurança entre o banco de dados e a aplicação
www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.
Plugins podem injetar filtros e validadores
C
Autenticação
Autenticar significa verificar se alguém é quem diz ser baseado em uma série de
credenciais.
Autenticação
O componente Zend_Auth usa o padrão de projeto Adapter para autenticar contra um tipo particular de serviço de autenticação, tal como:
●LDAP●SGBD●Armazenamento baseado em arquivos
Autorização
Autorização é o ato de determinar se alguém tem permissões para executar uma ação sobre
um dado recurso.
Autorização
NÃO SE META ONDE NÃO É CHAMADO!
Autorização
RBAC – Role Based Access Control
►Papéis: quem solicita a ação;►Recursos: o que está sendo ativado;►Direitos: os privilégios que um papel tem para um dado recurso.
Autorização
Para papéis, o ZF tem Zend_Acl_Role.Para recursos, ele tem Zend_Acl_Resource.
Os direitos são controlados pelo componente integrador Zend_Acl.
Zend_Acl trabalha por padrão com o conceito de lista branca: se nada for especificado, o acesso
ao recurso é negado.
Autorização
Você pode trabalhar com lista negra, mas é menos comum e menos seguro.
MUITO OBRIGADO!
Mais informações
● Zend Framework website http://framework.zend.com
● Zend Developer Zone http://devzone.zend.com
● ZFTutorials forum http://www.zftutorials.com
● Blogs
● Matthew Weier O'Phinney: http://weierophinney.net/matthew
● Cal Evans: http://blog.calevans.com
● Andries Seutens: http://andries.systray.be/blog
● Rob Allen: http://akrabat.com
● Zend Framework Brasil
● http://www.zfbrasil.com
● http://groups.google.com/group/zfbrasil