Desenvolvimento seguro com PHP

image_pdfimage_print

É com enorme satisfação que escrevo esse meu primeiro artigo para o Linha de código, sobre um assunto tão importante nos ultimos tempos onde o que mais se vê nas midias é noticia de sites sendo invadidos.

Muitos desses ataques são por erros bem comuns cometidos por programadores, no nosso caso, programadores PHP, nesse artigo pretendo falar sobre algumas precauções a se tomar durante o desenvolvimento de sua aplicação web para evitar grande parte dos ataques.

Configurar o PHP.ini

Primeiramente, devemos atentar para as configurações oferecidas pelo PHP para tornar nosso aplicativo mais seguro. Não vou falar sobre a diretiva safe_mode e nem das que derivam desta pois esta está obsoleta.

    • disable_functions=string

Com essa diretiva, você pode desabilita funções especificas do php que podem gerar problemas de segurança, como por exemplo o fopen(),popen() e file(). Dessa forma: disable_functions=fopen,popen,file;

    • disable_errors=On|Off

Deixe essa função habilitada só se estiver em ambiente de desenvolvimento, já que é indispensável saber detalhes sobres os erros de sua aplicação, mas quando for passar sua aplicação para ambiente de produção deve desabilitar essa diretiva, e usar métodos alternativos para saber de erros gerados pela aplicação (salvar os erros em um arquivo de log);

    • doc_root=string

Essa diretiva pode ser configurada com um caminho que especifica o diretório raiz a partir do qual os arquivos PHP serão servidos. Se a diretiva doc_root estiver configurada com nada (vazia), ela será ignorada, e os scripts PHP serão executados exatamente conforme especifica a URL;

    • open_basedir=string

A diretiva open_basedir do PHP pode estabelecer um diretório base ao qual todas as operações com arquivos estarão restritas. Suponha que seu site esteja localizado na pasta home/www , para impedir que pessoas má intencionadas manipulem arquivos , tais como /etc/passwd por meio de alguns comandos simples do proprio PHP, você deve configurar essa diretiva da seguinte forma: open_basedir = “/home/www/”.

    • expose_php=On|Off

É conveniente desabilitar essa opção, pois ela exibe detalhes sobre o PHP na assinatura do servidor.

Configurando o Apache

    • ServerSignature

Esta diretiva é responsavel por gerar a assinatura do servidor, mostrando a versão do servidor Apache, o nome do servidor, à porta e aos módulos compilados. É aconselhável mantê-la desabilitada.

    • ServerToken

Se a ServerSignature estiver habilitada, essa irá configurar o grau de detalhes sobre o servidor que será fornecido, estão disponiveis seis opções: Full, Major, Minimal, Minor, OS e Prod.

phpinfo()

Frequentemente programadores inexperientes deixam que alguma arquivo php com referencia a essa função vá ao modo de produção do site, o que é muito perigoso, pois como sabemos o phpinfo()exibe detalhes de como seu php está configurado e isso é muito interessante para hackers. Portanto, sempre que for colocar a sua aplicação web em modo de produção certifique-se que não há nenhuma chamada esta função.

Se você duvida do quanto esse erro é comum, coloque o seguinte texto na busca do google:inurl:phpinfo.php . Tenho certeza que haverão muitos resultados.

Mude a extensão do documento

Isso mesmo, pouca gente sabe, mas é possivel facilmente alterar a extensão de um arquivo PHP (.php), basta mudar a linha do httpd.conf (arquivo de configuração do apache) onde se lê: addType application/x-httpd-php .php para por exemplo addtype application/x-httpd-php .asp

Impedindo o acesso a determinadas extensões de arquivos

Existem extensões de arquivos bastante procuradas por hackers, .inc é um exemplo dessas, é conveniente impedir que seja possivel o acesso a arquivos com esta extensões. Para isso o apache tem uma diretiva de configuração (httpd.conf) chamada Files, como mostra Listagem 1.

Listagem 1: Modificando a diretiva Files do arquivo httpd.conf

1
2
3
4
<files *.inc>
    Order allow,deny
    Deny from all
  </files>

Cross-Site Scripting (XSS)

Cross-site scripting (XSS) é um tipo de vulnerabilidade do sistema de segurança de um computador, encontrado normalmente em aplicações web que activam ataques maliciosos ao injectarem client-side script dentro das páginas web vistas por outros usuários. Um script de exploração de vulnerabilidade cross-site pode ser usado pelos atacantes para escapar aos controlos de acesso que usam a mesma política de origem. [definição da Wikipedia].

Para evitar esse tipo de ataque no sistema web em PHP, você tratar os dados que usuario oferece como entrada com as seguintes funções:

    • string htmlentities(string input [,int quote_style [, string charset ] ])

Esta função converte caracteres que possuem significado especial em HTML para strings um browser pode mostrar como sendo fornecidos, em vez de executá-las como HTML.

    • string strip_tags(string str [, string allowed_tags])

Esta função permite escolhar que tags html serão permitidas na string.

SQL Injection

Injeção de SQL, mais conhecida através do termo americano SQL Injection, é um tipo de ameaça de segurança que se aproveita de falhas em sistemas que interagem com bases de dados via SQL. A injeção de SQL ocorre quando o atacante consegue inserir uma série de instruções SQL dentro de uma consulta (query) através da manipulação das entrada de dados de uma aplicação. [Definição da Wikipedia]

Precauções a se tomar para evitar ataques via SQL injection:

Conclusão

Meu objetivo com esse artigo não foi dar um passo-a-passo de como fazer uma aplicação 100% segura, até mesmo porque isso não existe, mas sim abrir a mente dos desenvolvedores para esse lado da programação que muitos deixam de lado e acabam sofrendo as consequencias uma hora ou outra. Agradeço a quem leu este artigo até o fim, pois é o meu primeiro aqui no Linha de Código. Peço que comentem criticas e complementem o artigo nos seus comentários.

Referência bibliográfica: Dominando PHP e Mysql do iniciante ao profissional, W. Jason Gilmore . Wikipédia e PHP.net (manual do PHP).

Fonte: Linha de Código – Hiago Hubert

Sou bacharel em Sistemas de Informação pela Estácio de Sá (Alagoas), especialista em Gestão Estratégica da Tecnologia da Informação pela Univ. Gama Filho (UGF) e pós-graduando em Gestão da Segurança da Informação pela Univ. do Sul de Santa Catarina (UNISUL). Tenho interesse por todas as áreas da informática, mas em especial em Gestão, Segurança da Informação, Ethical Hacking e Perícia Forense. Sempre disposto a receber sugestões de assuntos para criar uma postagem.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Quer ficar atualizado?

Inscreva-se em minha newsletter e seja notificado quando eu publicar novos artigos de graça!