我该怎么做才能在Wordpress中获得实际准备好的语句

时间:2016-07-05 14:42:46

标签: php mysql wordpress

我的公司希望将WordPress用于他们的Internet站点,我主要关注的是使用预准备语句。根据{{​​3}},我自己难以置信地阅读了源代码,WordPress清理字符串但在数据库中

我能做些什么来获得真实的东西吗?或者我的担忧没有根据?

2 个答案:

答案 0 :(得分:10)

历史

了解wpdb a fork Justin Vincent's ezSQL libraryway back in 2003类是a couple of months引入的a year before,只是在used发布了MySQL预编译语句协议之后比mysql_escape_string() PHP 任何 API支持访问它:WordPress因此做了唯一的事情,并且要求任何变量直接连接到动态SQL。

那时候,ezSQL(以及WordPress)just a few months earlier PHP的for nearly two years函数来逃避这些文字 - 因此不知道数据库连接的实际编码(仅在PHP本身解决的威胁) switched)。

这仍然是WordPress(仅)对SQL注入addslashes()的防御,因此for over four years使用(更不安全)mysql_real_escape_string()进行转义 - 这种情况随后仍然存在{ {3}}直到utilised 终于 wpdb::prepare()(尽管introduced the interimanother five years}!

然后不是using,直到WordPress开始MySQLi本地语句准备的驱动程序 (即already pointed out):现在这个两年前,作为@naththedeveloper ticket #21663a protected member中的讨论表明,使用本地预处理语句甚至可能不在待办事项列表中。

现状

不幸的是,由于MySQLi对象是wpdb类的during instantiation,其中没有getter(并且在内部分配its downsides),因此您无法使用本机预处理语句使用WordPress的数据库连接(至少,不能不用自己的类修改/替换wpdb)。

  

我能做些什么来获得真实的东西吗?

当然,您可以打开自己的/单独的数据库连接,您可以根据自己的需要完全灵活地进行连接。

  

或者我的担忧没有根据?

与原生语句准备一样好(并且我同意它确实应该是任何新项目中针对SQL注入的默认防御策略),它也有http://shiny.rstudio.com/gallery/actionbutton-demo.html。仔细转义一个变量以用作SQL文字(例如,由PDO准备好的语句模拟完成;以及这些日期试图提供的wpdb::prepare() 应该对所有已知的攻击...

答案 1 :(得分:0)

本地的MySQLi准备查询不可用。 https://core.trac.wordpress.org/ticket/42352已开放并正在进行一些活动