CURL, file_get_contents, allow_url_fopen e allow_url_include

Quando temos um site feito em PHP, um problema (e que não é problema) que nos surge muitas vezes quando temos o nosso site alojado numa empresa de webhosting, é necessitarmos de usar algumas funções que estão bloqueadas por motivos de segurança.

A mais conhecida, é o file_get_contents, que quando está habilitada no php constitui um problema de segurança tanto para o servidor como para o código feito em PHP.
O file_get_contents permite abrir url’s à distância como se fossem ficheiros, e isso caros leitores, é um grande “buraco de segurança”, que deve ser a todo custo evitado.

Existem muitas empresas de webhosting que simplesmente se estão “borrifando” e permitem tudo e mais alguma coisa, incluindo o file_get_contents, achando que assim satisfazem o cliente. O cliente claro fica satisfeito naquela altura, mas na maioria das vezes nem imagina que um buraco de segurança grave fica aberta para o site dele.

Assim, algumas empresas de wehosting que realmente se preocupam com a segurança dos clientes, desabilitam essa função, através de dois parametros no ficheiro de configuração do php (o php.ini), parametros esses chamados de allow_url_fopen e allow_url_include.

Quando isso acontece, alguns clientes entram em pânico, pensando que a empresa de webhosting os está a prejudicar, quando na realidade os está a ajudar. Na verdade a empresa que bloqueia essas funções, está verdadeira preocupada com os seus clientes, e é por isso que disponibiliza sempre uma alternativa ao file_get_contents, sendo essa alternativa chamada de CURL.

O CURL faz basicamente o mesmo que o file_get_contents, mas é bastante mais seguro e muito mais avançado, e permite que o cliente realmente produza código de qualidade e seguro.

A dificuldade para quem usa o file_get_contents, é como vão agora mudar para o CURL, sem muitas vezes entenderem isso. Ora é aí que este artigo entra, pois vamos terminar este artigo, com uma fantástica função feita em PHP, que simula o file_get_contents, usando o CURL, resolvendo assim a maioria dos problemas para quem não souber usar o CURL.

Fica então a função, que esperemos que esclareça e ajude a quem estiver na situação de ter de usar o CURL e não souber faze-lo.

A função:

[php]
function file_get_contents_curl($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);

// configura o curl para retornar o conteudo em vez
// de fazer o envio directamente para o browser.
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_URL, $url);

$data = curl_exec($ch);
curl_close($ch);

return $data;
}

[/php]

Se fosse o file_get_contents, usariamos assim

[php]
$variavel = file_get_contents(‘http://www.site.com/’);
[/php]

Com esta função alternativa usando o CURL, usariamos assim, depois de declarada a função:

[php]
$variavel = file_get_contents_curl(‘http://www.site.com/’);
[/php]

Como podem verificar é extremamente simples, seguro, e o problema (que não era um problema), está finalmente resolvido.

Comentários

  1. Bom Dia!
    Muito bom o seu artigo, mas poderia passar um exemplo de vulnerabilidade ao deixar o file_get_contents liberado?
    Pois você fala em segurança, mas cita como…
    Abraços

Deixe seu comentário

*