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

标签 php mysql wordpress

我的公司想在他们的 Internet 站点上使用 WordPress,我主要关心的是准备好的语句的使用。根据this ,我难以置信地自己阅读了源代码,WordPress 清理了字符串,但没有在数据库中准备好。

我能做些什么来得到真实的东西吗?还是我的担忧没有根据?

最佳答案

历史

了解 wpdb类,最初 a forkJustin Vincent's ezSQL library , 介绍 way back in 2003 , 只有 a couple of months MySQL 准备语句协议(protocol)发布后超过a year before PHP 有任何 API 支持来访问它:因此 WordPress 做了它当时唯一能做的事情,并要求将任何变量直接连接到动态 SQL 中。

那时,ezSQL(以及 WordPress)used PHP 的 mysql_escape_string()函数来转义这些文字——因此不知道数据库连接的实际编码(一种仅在 PHP 本身中解决的威胁 just a few months earlier)。

这仍然是 WordPress 对 SQL 注入(inject)的(唯一)防御 for nearly two years ,于是它switched使用(更不安全)addslashes()为了逃避——当时的情况一直存在for over four years直到 mysql_real_escape_string() 终于 utilised (尽管 wpdb::prepare()introduced 中是 the interim)!

然后它不是 another five years直到 WordPress 开始 using本地语句准备的驱动程序能够(即MySQLi):这是不到两年前的事了,@naththedeveloper already pointed out ,讨论在ticket #21663这表明使用 native 准备好的语句甚至可能不在待办事项列表中。

现状

不幸的是,因为 MySQLi 对象是 a protected member wpdb 类没有 getter(并且在内部分配 during instantiation ),您无法将 native 准备好的语句与 WordPress 的数据库连接一起使用(至少,如果不修改/替换 wpdb 与你自己的类)。

Is there anything I can do to get the real thing?

当然,您可以打开自己的/单独的数据库连接,您可以完全灵活地按照自己的意愿进行操作。

Or are my concerns unfounded?

与原生语句准备一样出色(我同意它确实应该是任何新项目中针对 SQL 注入(inject)的默认防御策略),它也有 its downsides .小心地转义一个变量以用作 SQL 文字(例如,通过 PDO 的准备语句模拟完成;这就是 wpdb::prepare() 这些天试图提供的)应该 抵抗所有已知的攻击...

关于php - 我该怎么做才能在 Wordpress 中获得实际准备好的语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38206366/

相关文章:

javascript - 根据来自 php 脚本的作业订单安排 cron 作业的更好方法

php - 这个 SQL 查询是安全的吗?

mysql - 如何删除 mySQL 中的重复项?

php - .htaccess 从子域重定向到子域

mysql - 我需要更改数百篇 wordpress 文章中的 url。帮助?

php - 当我想为 braintree 上的每次点击结账生成 token 时,我遇到了 ssl 证书错误

php - 使用一个输入提交多个变量

mysql - 哪个 mysql 系统变量影响 group by 子句?

php - 通过唯一编号定义用户

jquery - 样式日期选择器 : highlight specific dates