Tema: Seguridad
Ver Mensaje Individual
  #3 (permalink)  
Antiguo 22/03/2009, 11:48
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Seguridad

Dependiendo de la finalidad que tenga tu sistema, no creo que sea lo más óptimo borrar palabras tan "triviales" como SELECT, UNION, HTTP, o todas las que allí pones.

Supongo que no es necesario decirte que magic_quotes debe ser preferentemente desactivada en el php.ini, pero si no es posible hacerlo, realizar el escape al inicio del script. Así tienes TODOS los datos limpios:

Código php:
Ver original
  1. function stripslashes_array(&$datos) {
  2.     $datos = is_array($datos) ? array_map('stripslashes_array', $datos) : stripslashes($datos);
  3.     return $datos;
  4. }
  5.  
  6. if(
  7.     ( function_exists("get_magic_quotes_gpc") and get_magic_quotes_gpc() ) or
  8.     ( ini_get('magic_quotes_sybase') and (strtolower(ini_get('magic_quotes_sybase')) != "off" ) )
  9. ) {
  10.     stripslashes_array($_GET);
  11.     stripslashes_array($_POST);
  12.     stripslashes_array($_COOKIE);
  13. }
A lo que voy es que ese proceso debe realizarse globalmente y no sólo a ciertos datos cuando van a formar parte de la consulta.

Por otro lado, regresando a los de la eliminación de palabras, como te digo no es recomendable borrarlas, aunque esto obviamente depende de la finalidad de tu sistema. Usar simplemente mysql_real_escape_string() sobre los datos, además de una validación con expresiones regulares, es más que suficiente para evitar inyecciones SQL.