Wpdb->Insert:我需要为SQL注入做准备吗?

时间:2011-08-15 作者:redconservatory

我是否需要在wpdb->插入之前使用wpdb prepare?

如果我正在使用wpdb->insert将值插入wordpress表中,那么在插入数据之前我需要“清理”数据吗,还是这个方法(wpdb->insert)可以为我这样做?

3 个回复
最合适的回答,由SO网友:nobody 整理而成

不,您不应该准备或逃避数据,这是由wpdb

wpdb class reference:

data:

(数组)要插入的数据(列=>;值对)。$数据列和$数据值均应为“.”;“原始”;(两者都不应进行SQL转义)。

但是,如果您正在编写自己的SQL,而不是使用insert 方法,那么是的,您应该使用prepare.

SO网友:Felixius

以下是wpdb类的警告。

https://codex.wordpress.org/Class_Reference/wpdb

警告

此类中的某些函数将SQL语句作为输入。您必须对SQL查询中包含的所有不受信任的值进行SQL转义,以防止SQL注入攻击。检查文档,查看您计划使用的函数是否为您的SQL转义,或者是否希望它预先转义。

So I read this as - the wpdb class does not automatically prepare or escape the data for you.

我很确定,如果您不能完全信任代码中的数据源,那么我建议使用prepare类(?)。

如果没有正确使用prepare类,不要认为使用prepare类可以修复它。我是一个相当新的,所以请张贴任何更正作为答复,如果我不正确。

$wpdb->准备(“从ID=%d且名称=%s的表中选择*”,$ID,$name);

在上面的语句中,有两个额外的属性。一个表示ID,一个表示名称。据我所知,每个都与查询中的项数顺序对应。还有%s=字符串,%d=整数,%f=浮点。

另外,根据我的阅读,如果你没有加入额外的属性,那么prepare实际上什么都不会做。会有一个警告,但如果你关掉它,也许你不会知道。

下面是一个来自类引用本身的示例,其中他们在下面的插入中添加了一个prepare类。

https://codex.wordpress.org/Class_Reference/wpdb#Protect_Queries_Against_SQL_Injection_Attacks

$wpdb->查询($wpdb->准备(“插入到$wpdb->postmeta(post\\u id,meta\\u key,meta\\u value)值(%d,%s,%s)”,数组(10,$metakey,$metavalue));

我担心的是,根据“没人”引用的同一页,上浮的答案是不正确的。我假设您使用prepare()而不是其他标准的php转义方法,因为我认为这个答案也是正确的。。。直到我挖得更深。

无论如何也许自最初的答案以来,情况已经发生了变化。

SO网友:Ijeoma Oguegbu

不,在使用-wpdb insert或wpdb delete时,不需要防止SQL注入。enter image description here

请参阅以下链接:

https://codex.wordpress.org/Data_Validation#Database

https://codex.wordpress.org/Class_Reference/wpdb#Protect_Queries_Against_SQL_Injection_Attacks

结束