Protegendo contra PHP Injection

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.