Você está na página 1de 8

Segurana em PHP

Desenvolva programas PHP com alto nvel de segurana


e aprenda como manter os servidores web livres de ameaas

Mrcio Pessoa

Novatec

captulo 1

Conceitos gerais

No primeiro captulo sero abordados alguns conceitos de desenvolvimento


visando segurana do projeto de um modo geral. No sero explorados
aspectos especficos do PHP; o objetivo deste captulo explicar de forma
simples os princpios de segurana em um projeto, independente de linguagens de programao ou sistemas operacionais.
Ao concluir este captulo, o leitor estar familiarizado com os seguintes
tpicos:

Conceitos bsicos de segurana relacionados programao.

Definio de usabilidade de um sistema.

Razes para realizar a programao visando a usurios ilegtimos.

Consideraes sobre desempenho.

Limites de acesso.

1.1 Segurana
Levando em considerao as boas linguagens de programao, elas por si
s no podem ser consideradas seguras ou inseguras; a segurana de sua
aplicao depende, sobretudo, de todo o projeto e, mais especificamente, do
cdigo do programa.
Nenhum esforo isolado suficiente para evitar problemas de segurana
de computadores. Com toda certeza o leitor j deparou com frases como:

17

18

Segurana em PHP

Nossa poltica de segurana prova de falhas.

A tecnologia usada neste DVD para evitar pirataria absolutamente


confivel.

Este sistema totalmente seguro!

Certamente no necessrio mencionar que essas frases foram muito


mal sucedidas, pois a segurana no pode ser medida de forma absoluta;
a segurana de um sistema deve ser aferida, no devendo ser tratada como
uma caracterstica do mesmo.
A segurana de um sistema deve ser balanceada com o custo e a usabilidade do projeto. De modo geral, um projeto com algum nvel de segurana
implementado tem um custo superior a um projeto sem nenhum requinte de
segurana. Esses custos dizem respeito contratao de pessoal especializado,
maior tempo para confeco do projeto e outros itens que acarretam maior
custo financeiro:

Custo

Tempo de projeto, pesquisa, programao e testes.

Profissionais mais bem-qualificados.

Hardware especfico ou mais poderoso.

Mais banda de internet para suportar maior interao com o usurio


e/ou criptografia.

Usabilidade

Facilitar ou complicar.

Cartes de acesso (tokens).

Tempo de sesso.

Senhas, chaves etc.

Para no tornar o projeto um bicho de sete cabeas, o nvel de segurana


desejado deve ser definido com cautela para no tornar o projeto economicamente impraticvel ou at mesmo to complicado que no possa ser
utilizado.

Captulo 1 Conceitos gerais

19

Outro item muito importante a ser levado em considerao que a segurana deve fazer parte do design do projeto. Muitos programas tm sua parte
de segurana implementada depois que est pronto. Isso, alm de implicar na
existncia de uma implementao problemtica dos recursos de segurana,
implica aumentar muito o tempo do projeto e conseqentemente os custos
deste.
O ltimo, porm no menos importante, recurso que citarei a informao fundamental estar sempre atualizado. Existem inmeros recursos
disponveis na internet, que vo desde websites especializados em segurana
at listas de discusso.

1.2 Usabilidade versus segurana


Quanto mais recursos de segurana forem implementados no sistema, mais
complicado ser o seu uso.
Existe um tipo de sistema muito popular que pode exemplificar isso muito
bem o Internet Banking. Tal sistema precisa ser muito fcil de usar, mas
necessita contar com recursos de segurana muito confiveis.
Os bancos tm usado os mais diversos e criativos artifcios de segurana
para garantir a legitimidade dos usurios autenticados no sistema. Para tanto,
usam recursos como:

Login (geralmente nmero da agncia e da conta)

Senha

Palavra secreta ou contra-senha

Nmero sorteado do carto de chaves de acesso (token)

Posio da seqncia dos nmeros de segurana impressos no carto


de dbito

Certamente tem se tornado cada vez mais complicado trabalhar com


Internet Banking, o que tem feito que as pessoas prefiram ir at as agncias
bancrias para no terem de aprender a usar ou por no confiarem nessa
tecnologia.

20

Segurana em PHP

Alguns bancos at fizeram softwares especficos para os clientes acessarem


os servios remotamente, mas isso exigia muito mais do que simplesmente
distribuir um disquete com o programa; envolvia custos com suporte tcnico
e treinamento dos clientes para trabalhar com um programa que nem sempre
era amigvel.
O desenvolvedor precisa usar de sensatez ao implementar recursos de
segurana em seu sistema. Leve em considerao os seguintes itens:

Valor da informao manipulada

Perfil do usurio

Faixa etria

Nvel de instruo

Finalidade do sistema (lazer ou trabalho)

Hardware usado

1.3 Postura de defesa


importante manter uma constante postura de defesa, a qual consiste em
procurar manter informaes protegidas. Ainda que uma informao no
tenha relevncia ou no seja confidencial, terceiros no devem tomar conhecimento dela para no tirar proveito de alguma forma. Isso conhecido tambm
como mtodo da ignorncia quanto menos algum sabe sobre voc, mais
privacidade voc ter e, conseqentemente, mais segurana.
Em termos prticos isso se resume em atitudes muito simples, afinal, se
voc no ganha nada em divulgar o sistema operacional que usa, no h ento
necessidade de divulgar. O mesmo se aplica linguagem de programao,
bancos de dados e demais recursos.

1.4 Desempenho
Ao desenvolver programas, esteja certo de que sempre possvel fazer melhor. Um bom programa deve fazer tudo o que foi planejado e ainda ter as
seguintes caractersticas:

Captulo 1 Conceitos gerais

21

Consumir o mnimo de tempo de CPU para ser executado.

Alocar a menor quantidade possvel de memria.

Gravar todos os dados necessrios usando o menor espao em disco


possvel.

Utilizar a rede interna e a internet de forma econmica e racional.

Procurar medir os recursos que so utilizados para execuo do programa uma prtica extremamente importante, pois j temos em mente que os
programas devem sempre consumir o mnimo de recursos do sistema. Dessa
forma, o processador ter tempo livre para executar outras tarefas.
Se uma pgina web dinmica consome poucos recursos do servidor
para ser gerada, ento o servidor poder atender tranqilamente mltiplas
requisies.
Na concepo de um projeto importante usar temporizadores, trechos
de cdigo que devem ser inseridos no corpo do script para medir o tempo
total de execuo do programa e, alm disso, de suma importncia aferir os
recursos disponveis no servidor. Isso pode ser feito com a ajuda de softwares
especficos para essa tarefa. No Apndice A, ser possvel encontrar uma viso
geral de alguns mtodos de temporizao e, no Apndice B, sero abordadas
algumas tcnicas de monitorao.

1.5 Usurios ilegtimos


Geralmente programadores definem a estrutura de um programa baseandose nos usurios legtimos do sistema. necessrio mudar esse conceito. O
programador que escreve sistemas com responsabilidade deve desenhar a
estrutura do sistema pensando sempre em primeiro lugar no usurio ilegtimo
e posteriormente no usurio real do sistema.
De fato uma tcnica muito simples, mas, depois que o projeto definido
dessa forma, a programao ganha muito em velocidade, e, como j sabemos,
tempo dinheiro.

22

Segurana em PHP

1.6 Filtro de dados


To importante quanto beber gua para evitar a desidratao filtrar as
variveis de entrada do programa, pois tudo que vem de alguma fonte externa deve ser minuciosamente inspecionado. Dados digitados pelos usurios,
coletados de arquivos, enviados por um formulrio, ou at interaes feitas
com servidores de bancos de dados devem passar por um crivo.
Os filtros de dados podem ser considerados como a forma mais significativa
de implementar segurana em uma aplicao.
Um deslize muito comum que faz programadores perderem os cabelos
realizar checagens de consistncia de dados apenas usando JavaScript. Esses
scripts so excelentes para melhorar a interface com o usurio, em que os
campos de um formulrio podem ser testados sem haver o recarregamento
da pgina. O problema que o JavaScript pode ser desativado no browser, ou
ainda o formulrio pode ser preenchido por um rob (programa que busca
por informaes em um formulrio) funcionando como browser e passando
despercebido pelo JavaScript. Dessa forma, importante realizar a checagem
de consistncia de dados no servidor tambm.

1.7 Manipulao de erros


To comum quanto ver aves no cu ver websites de grandes instituies
exibindo informaes confidenciais quando apresentam problemas. Todos
que navegam pela internet j tiveram a experincia de entrar em um site e o
mesmo estar indisponvel.
A falha nesse caso no o fato de estar indisponvel, afinal problemas
realmente acontecem. A gravidade consiste em, quando da ocorrncia de
problemas, informaes como endereo do servidor de banco de dados, variveis do sistema e outras informaes serem exibidas pelo browser, de modo
que pessoas mal intencionadas podem tirar proveito dessas informaes para
prejudicar o seu sistema.
Por essa razo, importante manipular excees geradas pelo sistema e garantir que mensagens de erro sejam registradas somente em arquivos de log.
de suma importncia ento permanecer atento aos logs gerados pelo
sistema, pelo servidor web e pelos outros recursos do sistema operacional.

Captulo 1 Conceitos gerais

23

1.8 Limitador de acessos


Um limitador de acesso no propriamente um programa ou uma ferramenta; trata-se de um ou mais recursos que devem ser implementados em um
projeto com foco em segurana.
Um tpico exemplo de um limitador de acesso uma funo no sistema
que reage a tentativas mal sucedidas de login por um usurio, o que pode ser
caracterizado como uma possibilidade de quebrar uma senha. Esse tipo de
limitador de acesso conhecido tambm como rate limit.
Outro exemplo clssico realizar a limitao de acessos por endereo
IP. Isso pode ser feito usando regras de firewall ou com o auxlio de ACLs
implementadas no sistema.

Você também pode gostar