Voy a agregar un aporte , se basa en sanear los datos que entrega el cliente al servidor digamos como una capa intermedia , he de explicar que el script solamente esta basado en datos $_GET pero su uso lo aconsejo en todas las variables $GLOBALS globales y sanear segun la necesidad , este script es automatico y sanea todos los datos que provienen de $_GET antes de llamarlo en la aplicacion para su uso , lo que se trata es entregarselo a la aplicacion ya saneado para su uso , la verificacion sen este caso en los $_GET lo he basado solamente en alfanumericos solo dejaremos pasar datos originales que sean alfanumericos de lo contrario retiraremos cualquier caracter invalido , revaluarla como NULL o destruirla totalmente , antes de el saneamiento guardaremos en memoria en una variable de session el dato original , la intencion es verificar los datos que sean alfanumericos de esta manera estamos fortificando el sistema y eliminado varias vulnerabilidades web.
ami me gusta aplicarlo en vez de solo a $_GET en $GLOBALS y segun el array ya sea $_POST , $_FILES , $_REQUEST aplicar el saneamiento correspondiente , asegurandonos de que no entra nada que no tuviera que llegar.
si deseas que no solo deje pasar la puerta a alfanumericos tan solo cambia la funcion ctype_alnum() , este ejemplo es muy basico y espero que sirva como orientacion
el script viene configurado con un ataque simple , despues de ver el ataque descomenta las lineas DE PRUEBA
de una en una , son ejemplos sencillos de que hacer en caso de que la variable no fuera en este caso alfanumerico , retirar caracteres , convertirlos o simplemente dar un valor null al dato , para que no pudiera actuar.
para hacer pruebas viene en el script un get javascript de prueba pero puedes pasar datos via url y automaticamente los escapara , prueba el resultado
una manera muy simple de evitar algunas vulnerabilidades web ya que solo dejando pasar alfanumericos evita muchos posibles ataques
Código PHP:
Ver original<?php
// creamos la session
// un ejemplo de un get javascript
$_GET['QUERY']= "<script language='javascript' type='text/javascript'>alert('TU WEB ES VULNERABLE PODRIA HACER MUCHAS COSAS MALAS.');</script>";
// volcado de datos get , dato original.
// comprobacion de get
{
// mensaje de salida si es false
print('No existe ninguna variable get');
}
else
{
// verificacion de datos
foreach($_GET as $value=>$val)
{
// creamos la session con el dato original , guardamos en memoria el dato original antes de actuar
$_SESSION['GET'][$value] = $val;
// comprobamos si el valor es alfanumérico
{
// en este caso imaginemos que no existe ningun saneamiento, para ver que podria pasar.
// PRIMERO PROBAREMOS SIN NINGUN ESCAPADO , DESPUES DESCOMENTAR LOS EJEMPLOS
// vamos a sanear ahora los datos (convertir caracteres htmlspecialchars)o (retirarlos strip_tags())
// ejemplo de funciones
//$_GET[$value] = strip_tags($_GET[$value]);
// $_GET[$value] = htmlspecialchars($_GET[$value]);
// $_GET[$value] = NULL;
// unset($_GET[$value]);
/* tambien podemos añadir verificaciones para otros tipos de datos como por ejemplo un email
if(! preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/", $_GET[$value]))
{
$_GET[$value] = NULL;
}
*/
}
// ejecutar variable para la prueba
echo $_GET[$value];
}
}
// volcado de datos get , saneados.
?>
espero haberme explicado lo mejor posible , no soy muy tecnico sorry!!