48
Desenvolvimento de Código Seguro em PHP com Zend Framework www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.

Desenvolvimento em Código Seguro para PHP com Zend Framework

Embed Size (px)

DESCRIPTION

Palestra proferida no XI FISL em 2010.

Citation preview

Page 1: Desenvolvimento em Código Seguro para PHP com Zend Framework

Desenvolvimento de Código Seguro em PHP com Zend Framework

www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.

Page 2: Desenvolvimento em Código Seguro para PHP com Zend Framework

Quem sou eu?

www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.

Page 3: Desenvolvimento em Código Seguro para PHP com Zend Framework

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.

Page 4: Desenvolvimento em Código Seguro para PHP com Zend Framework

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).

Page 5: Desenvolvimento em Código Seguro para PHP com Zend Framework

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?

Page 6: Desenvolvimento em Código Seguro para PHP com Zend Framework

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)

Page 7: Desenvolvimento em Código Seguro para PHP com Zend Framework

Segurança

www.fgsl.eti.br. É livre a reprodução, desde que citada a fonte.

PHP é seguro?

Page 8: Desenvolvimento em Código Seguro para PHP com Zend Framework

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

Page 9: Desenvolvimento em Código Seguro para PHP com Zend Framework

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.

Page 10: Desenvolvimento em Código Seguro para PHP com Zend Framework

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

Page 11: Desenvolvimento em Código Seguro para PHP com Zend Framework

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

Page 12: Desenvolvimento em Código Seguro para PHP com Zend Framework

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.

Page 13: Desenvolvimento em Código Seguro para PHP com Zend Framework

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.

Page 14: Desenvolvimento em Código Seguro para PHP com Zend Framework

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

Page 15: Desenvolvimento em Código Seguro para PHP com Zend Framework

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í...

Page 16: Desenvolvimento em Código Seguro para PHP com Zend Framework

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

Page 17: Desenvolvimento em Código Seguro para PHP com Zend Framework

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.

Page 18: Desenvolvimento em Código Seguro para PHP com Zend Framework

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.

Page 19: Desenvolvimento em Código Seguro para PHP com Zend Framework

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.

Page 20: Desenvolvimento em Código Seguro para PHP com Zend Framework

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!

Page 21: Desenvolvimento em Código Seguro para PHP com Zend Framework

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

Page 22: Desenvolvimento em Código Seguro para PHP com Zend Framework

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

Page 23: Desenvolvimento em Código Seguro para PHP com Zend Framework

Toda entrada está contaminada - filtre

Motoqueiro Fanstasma é marca registradas da Marvel (www.marvel.com). Todos os direitos reservados.

NEM PENSE EM USAR REGISTER GLOBALS

Page 24: Desenvolvimento em Código Seguro para PHP com Zend Framework

Toda entrada está contaminada - filtre

Fonte: http://img.vivaolinux.com.br/imagens/artigos/comunidade/usuario.jpg

Fonte: http://victorywebproductions.com/images/website1.jpg

Page 25: Desenvolvimento em Código Seguro para PHP com Zend Framework

Toda entrada está contaminada - filtre

Fonte: http://www.weno.com.br/blog/archives/capeta_pintor.gif

Fonte: http://victorywebproductions.com/images/website1.jpg

Page 26: Desenvolvimento em Código Seguro para PHP com Zend Framework

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

Page 27: Desenvolvimento em Código Seguro para PHP com Zend Framework

Anule efeitos indesejados na saída

BANCO DE DADOS

APLICAÇÃO

Fonte: http://1.bp.blogspot.com

Page 28: Desenvolvimento em Código Seguro para PHP com Zend Framework

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

Page 29: Desenvolvimento em Código Seguro para PHP com Zend Framework

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

Page 30: Desenvolvimento em Código Seguro para PHP com Zend Framework

Evite ataques CSRF

Page 31: Desenvolvimento em Código Seguro para PHP com Zend Framework

Evite ataques CSRF

Page 32: Desenvolvimento em Código Seguro para PHP com Zend Framework

Evite ataques CSRF

<form action=”algumacoisa.com/fazer.php”>

Page 33: Desenvolvimento em Código Seguro para PHP com Zend Framework

Evite ataques CSRF

Zend_FormZend_Filter Zend_Validate

Page 34: Desenvolvimento em Código Seguro para PHP com Zend Framework

Segurança entre o banco de dados e a aplicação

Page 35: Desenvolvimento em Código Seguro para PHP com Zend Framework

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);

Page 36: Desenvolvimento em Código Seguro para PHP com Zend Framework

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));

Page 37: Desenvolvimento em Código Seguro para PHP com Zend Framework

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...

Page 38: Desenvolvimento em Código Seguro para PHP com Zend Framework

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

Page 39: Desenvolvimento em Código Seguro para PHP com Zend Framework

Autenticação

Autenticar significa verificar se alguém é quem diz ser baseado em uma série de

credenciais.

Page 40: Desenvolvimento em Código Seguro para PHP com Zend Framework

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

Page 41: Desenvolvimento em Código Seguro para PHP com Zend Framework

Autorização

Autorização é o ato de determinar se alguém tem permissões para executar uma ação sobre

um dado recurso.

Page 42: Desenvolvimento em Código Seguro para PHP com Zend Framework

Autorização

NÃO SE META ONDE NÃO É CHAMADO!

Page 43: Desenvolvimento em Código Seguro para PHP com Zend Framework

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.

Page 44: Desenvolvimento em Código Seguro para PHP com Zend Framework

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.

Page 45: Desenvolvimento em Código Seguro para PHP com Zend Framework

Autorização

Você pode trabalhar com lista negra, mas é menos comum e menos seguro.

Page 46: Desenvolvimento em Código Seguro para PHP com Zend Framework

Perguntas?

www.fgsl.eti.br

Page 47: Desenvolvimento em Código Seguro para PHP com Zend Framework

MUITO OBRIGADO!

Page 48: Desenvolvimento em Código Seguro para PHP com Zend Framework

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