wpdb-insert: ¿necesito prepararme para la inyección SQL?

11

¿Debo usar wpdb prepare antes de wpdb- > insertar?

Si inserto valores en una tabla de wordpress usando wpdb- > insert, ¿necesito "limpiar" mis datos antes de insertarlos o este método (wpdb- > insert) lo hace por mí?

    
pregunta redconservatory 15.08.2011 - 13:57

3 respuestas

17

No, no debes preparar o escapar los datos, esto se hace por ti con la clase wpdb .

De la referencia de clase wpdb :

  

datos :

     

(matriz) Datos para insertar (en la columna = > pares de valores). Tanto las columnas de $ data como los valores de $ data deben ser "en bruto" (ninguno de ellos debe ser escapado de SQL).

Sin embargo, si estuviera escribiendo su propio SQL en lugar de usar el método insert , entonces sí, debería escapar usando prepare .

    
respondido por el nobody 15.08.2011 - 14:23
0

La siguiente es una advertencia para la clase wpdb.

enlace

  

Una advertencia

     

Algunas de las funciones en esta clase toman una declaración SQL como entrada.   Debe SQL escapar de todos los valores no confiables que incorpora en el SQL   Consulta para evitar ataques de inyección SQL. Revisa la documentación para ver   Si la función que planea usar escapa a SQL por usted o espera que lo haga   ser pre-escapado.

Entonces leí esto como: la clase wpdb no prepara o escapa automáticamente los datos por ti.

Estoy bastante seguro de que si no puede confiar al 100% en la fuente de datos en su código, sugiero usar la clase de preparación (?).

No piense que usar la clase de preparación lo arreglará sin usar la clase de preparación correctamente. Soy bastante nuevo en esto, así que publique las correcciones como respuesta si no estoy en lo correcto.

$ wpdb- > prepare ("SELECT * FROM tabla WHERE ID =% d AND name =% s", $ id, $ name);

En la declaración anterior, hay 2 atributos adicionales. Una para la identificación y otra para el nombre. Hasta donde lo leí, cada uno corresponde en orden al número de elementos en su consulta. También% s = cadena,% d = entero y% f = flotante.

Además, en mi lectura, si no pones los atributos adicionales, entonces preparar no hará nada. Habrá una advertencia, pero si la desactivas, quizás no lo sepas.

Aquí hay un ejemplo de la referencia de clase en sí misma, donde agregan una clase de preparación en un INSERTAR a continuación.

enlace

  

$ wpdb- > query ($ wpdb- > prepare ("INSERT INTO $ wpdb- > postmeta (   post_id, meta_key, meta_value) VALUES (% d,% s,% s) ",           array (10, $ metakey, $ metavalue)))

Mi preocupación es que la respuesta con votos ascendidos es incorrecta según la misma página a la que 'nadie' hace referencia. Supongo que usas prepare () pero no otros métodos de escape de php estándar porque también tomé esta respuesta como correcta ... hasta que profundice más.

De todos modos ... tal vez las cosas hayan cambiado desde la respuesta original.

    
respondido por el Felixius 28.08.2018 - 08:36
0

No, no es necesario evitar las inyecciones de SQL cuando usa - wpdb insert o wpdb delete.

Vea los siguientes enlaces:

enlace

enlace

    
respondido por el oguegbu ijeoma 03.12.2018 - 13:24

Lea otras preguntas en las etiquetas