Foros del Web » Programando para Internet » PHP »

Insertar NULL en MySQL con seguridad

Estas en el tema de Insertar NULL en MySQL con seguridad en el foro de PHP en Foros del Web. Este tema es sobre seguridad con bases de datos (SQL Injection). Siempre filtro todas las variables antes de ejecutar sentencias SQL. Ejemplo: Código PHP: // filtrado de variables ...
  #1 (permalink)  
Antiguo 01/01/2006, 11:52
Avatar de jerkan  
Fecha de Ingreso: septiembre-2005
Mensajes: 1.607
Antigüedad: 12 años, 2 meses
Puntos: 18
Insertar NULL en MySQL con seguridad

Este tema es sobre seguridad con bases de datos (SQL Injection). Siempre filtro todas las variables antes de ejecutar sentencias SQL.
Ejemplo:

Código PHP:
// filtrado de variables
$var1_filtrada filtra($POST["variable1"]);

// ejecucion de un insert
"INSERT INTO tabla (Var1, Var2) VALUES ('$var1_filtrada', '$var2_filtrada')" 
El método filtra() básicamente realiza un addslahes.

El problema es que ahora tengo unos campos que pueden ser nulos (NULL) y poniendo como valor 'NULL' en la sentenica SQL no funciona.
Para que funcione tengo que poner los valores sin comillas: ...VALUES ($var1_filtrada, $var2_filtrada) cosa que no me parece muy segura.
¿Alguien me puede dar algún consejo al respecto? Gracias.
  #2 (permalink)  
Antiguo 01/01/2006, 18:49
 
Fecha de Ingreso: diciembre-2005
Ubicación: Madrid, España
Mensajes: 154
Antigüedad: 12 años
Puntos: 2
En principio el filtro que usas no tiene influencia en el problema. Por cierto que yo uso "mysql_escape_string($sql)", y así te evitas tener que programártelo tu mismo ;)

El problema viene en las comillas simples para delimitar los valores de las variables en la cadena SQL. Se me ocurre aplicar un filtro específico que se encarga de añadir esas comillas simples en función de si el valor que recibe es NULL o no:

Código:
$sql = "INSERT INTO tabla (var1, var2) VALUES (" . $db->filtrarNulls($param1) . "," . $db->filtrarNulls($param2) . ")";
donde $db es un objeto de la clase que uses para la conexión, y el método "filtrarNulls($param)":

Código:
// Clase de conexión a la base de datos

function filtrarNulls($param) 
{
   if ($param == "valor-vacío-que-recibas")
   {
      $param_r = "NULL";
   }
   else
   {
      $param_r = "'" . mysql_escape_string($param) . "'";
   }
   return $param_r;
}
La verdad es que no lo he probado, pero yo creo que funcionará... y si no es así alguien me gritará

Saludos y suerte
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:43.