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). Certificações que possuo: CompTIA Security+, EXIN EHF, MCSO, MCRM, ITIL v3. Tenho interesse por todas as áreas da informática, mas em especial em Gestão e Governança de TI, Segurança da Informação, Ethical Hacking e Perícia Forense.

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!