Parceiro: Camisetas Hacker

Camisetas para Nerds & Hackers

terça-feira, 2 de outubro de 2012

Mais segurança na sua aplicação web feita em php


Mais segurança na sua aplicação web feita em php

 

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

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

A 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:

Um comentário:

............