Foros del Web » Programando para Internet » PHP »

Escribir nombre de variables en consultas SQL (forma especial)

Estas en el tema de Escribir nombre de variables en consultas SQL (forma especial) en el foro de PHP en Foros del Web. Hola, bueno tenía una duda. Yo tengo diferentes varaibles de post que las cargo a travez de lo siguiente: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código PHP: Ver original ...
  #1 (permalink)  
Antiguo 11/09/2011, 07:55
 
Fecha de Ingreso: agosto-2011
Ubicación: Montevideo
Mensajes: 44
Antigüedad: 13 años, 2 meses
Puntos: 5
Escribir nombre de variables en consultas SQL (forma especial)

Hola, bueno tenía una duda. Yo tengo diferentes varaibles de post que las cargo a travez de lo siguiente:

Código PHP:
Ver original
  1. $posts=array_keys($_POST);
  2. $regPost = count($_POST)-1;
  3.  
  4. /*A travez de esto consigo los nombres de las variables que viene por post, por
  5. ejemplo (titulo, detalle, etc..)
  6. Le doy un -1 porque las cuenta el submit cosa que no quiero.*/
  7.  
  8. /*Luego transformo los nombres de las variables que vienen por POST a variables
  9. fijas:*/
  10.  
  11.  for($i=1; $i<=$regPost; $i++)
  12.     {
  13.              eval("\$".$posts[$i]."=\$_POST['".$posts[$i]."'];");
  14.     }
  15.  
  16. /* Con esto ya debería tener mis variables de los post en este tipo:
  17. $titulo=$_POST['titulo'];
  18. */
  19.  
  20. //Luego genero la consulta:
  21.  
  22. $sql="INSERT INTO tabla (".$posts[0].") VALUES ("$".$posts[0].")";
  23.  
  24.  
  25. //Ese es un ejemplo, le puse que agarre el primer registro que viene por POST.
  26. //Y aquí viene el problema: Cuando hago esto me agrega a la base de datos, en
  27. //el atributo "titulo" un registro de valor "$titulo" cosa que enrealidad yo no
  28. //quiero,
  29. //yo solo quiero el valor de titulo y no su nombre.
  30. //El problema es que yo no se qué variable va a venir por POST entonces no
  31. //puedo
  32. //tirarme a un nombre en específico como por ejemplo:
  33. //$sql="INSERT INTO tabla (titulo) VALUES ('$titulo')";
  #2 (permalink)  
Antiguo 11/09/2011, 08:27
Avatar de Raziel_Ravenheart  
Fecha de Ingreso: agosto-2011
Ubicación: Ibagué, Tolima
Mensajes: 192
Antigüedad: 13 años, 2 meses
Puntos: 37
Respuesta: Escribir nombre de variables en consultas SQL (forma especial)

Bueno te responderé algo rápido, estas obteniendo esos datos por medio de la variable $_POST, lo que significa que estas enviando esos datos desde un formulario, y aparte de eso, ejecutas los valores en la variable $_POST directamente con eval... pfffff GRAVISIMO ERROR.

Eval te permite evaluar cualquier expresión, y si un usuario avanzado y malicioso, te envia una intrusión, un ataque XSS o peor una inyección sql, puedes despedirte de tu base de datos.
Mi consejo es que no utilices eval para nada, solo cuando seas tu mismo quien sabe de donde y como provienen los datos, mi consejo principal, es que cambies ese código para que no tengas que utilizar la función eval, aquí te dejo un documento de seguridad, que te recomiendo leas por completo:

http://www.forosdelweb.com/f18/inyeccion-xss-seguridad-php-eval-otras-funciones-ayuda-891245/
http://es.wikipedia.org/wiki/Eval#Seguridad
http://www.zonavirus.com/articulos/eval-la-funcion-maligna-de-javascript.asp

En el ultimo enlace dice que es de javascript, pero creeme cuando te digo, que es maligna en casi cualquier lenguaje de programación, y ahora también lee eesto:

http://mis-algoritmos.com/seguridad-en-aplicaciones-web

Por otro lado, para que deseas convertir las variables dentro de $_POST, si con un

foreach($_POST as $indice => $valor)

obtienes el indice en $indice y el valor en $valor, cuando $indice es el nombre de la variable que le asignaste desde el <form>, por medio del atributo name, mira el uso del foreach:

http://php.net/manual/es/control-structures.foreach.php

Exitos, y te recomiendo que cambies el código para que no uses la función eval. Tiene muchos riesgos si alguien se llega a dar cuenta incluso que no estas usando htmlentities o mysql_real_escape_string
  #3 (permalink)  
Antiguo 11/09/2011, 08:31
Avatar de Raziel_Ravenheart  
Fecha de Ingreso: agosto-2011
Ubicación: Ibagué, Tolima
Mensajes: 192
Antigüedad: 13 años, 2 meses
Puntos: 37
Respuesta: Escribir nombre de variables en consultas SQL (forma especial)

Por otro lado te puedo asegurar que el error estaría en en la variable

$sql="INSERT INTO tabla (".$posts[0].") VALUES ("$".$posts[0].")";

en el $ después de VALUES, no se si te equivocaste al poner los puntos, pero de todos modos no te aseguro nada, ya que el eval está tan complicado de entender, que seguro por lo menos yo me demoraría unos 15 mins analizandolo, jajajaja, pero bn ese no es el caso, el punto es que ya sabes lo mal que te puede ir usando eval y que para obtener los nombres de los indices basta con un foreach,.
  #4 (permalink)  
Antiguo 11/09/2011, 09:14
 
Fecha de Ingreso: agosto-2011
Ubicación: Montevideo
Mensajes: 44
Antigüedad: 13 años, 2 meses
Puntos: 5
Respuesta: Escribir nombre de variables en consultas SQL (forma especial)

Muchas gracias por la respuesta. Investigando descubrí que puedo evitar el eval como tu dices. Voy a leer mas sobre seguridad para implementarlo.

Saludos.

Etiquetas: nombre, registro, sql, tabla, variables, formulario
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 21:35.