Para colaborar con la seguridad de las webs, decir que aparte de las funciones indicadas, que si se usasen siempre reducirían mucho las posibilidades de atacar a la web, otra posibilidad añadida a la seguridad es comprobar de que tipo son las variables externas, un ejemplo muy típico es pasar un ID por GET, de lo que haga falta, y en el 100% de los casos (excluyendo los ataques) ese ID será numérico, entonces si sabemos que siempre debe ser numérico, ¿Porque no forzar a que sea numérico, o dar un error en caso de que no lo sea?
Forzar a que un dato sea numérico:
Código PHP:
$var = (int)$_GET['id']; //si la variable empieza con numeros y despues le sigue un string solo se veran los numeros, si empieza con letras y después tiene números, su valor sera 0
Comprobar que sea numérico:
Código PHP:
if(!is_numeric($_GET['id'])){
die("La variable ID contiene caracteres no permitidos");
//aqui podriamos logear este comportamiento en un archivo log, guardar ip, enviarnos un email, lo que hiciese falta
}
Un saludo
P.D: Vaya, mientras he escrito todo esto ya han comentado esta idea, jeje
EDIT: edito para añadir que esto se podría usar con cualquier tipo de dato, no solo con numéricos, is_bool, is_int, is_float, is_numeric (este último incluye a is_int y is_float), is_string, is_array, is_object, is_resource, is_null, is_scalar.