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

2024-02-02

我的公司希望在他们的网站上使用 WordPress,我主要关心的是准备好的语句的使用。根据this https://wordpress.stackexchange.com/a/139431,我自己难以置信地阅读了源代码,WordPress 清理了字符串,但是not在数据库中准备。

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


History

了解wpdb https://codex.wordpress.org/Class_Reference/wpdb类,原本a fork https://core.trac.wordpress.org/browser/trunk/b2-include/wp-db.php?rev=112 of Justin Vincent 的 ezSQL 库 http://justinvincent.com/ezsql, 被介绍早在2003年 https://codex.wordpress.org/Version_0.71, only 几个月 https://web.archive.org/web/20150315075138/http://dev.mysql.com/doc/refman/4.1/en/news-4-1-0.htmlMySQL 准备语句协议发布后超过一年前 http://news.php.net/php.announce/50PHP 有any用于访问它的 API 支持:WordPress 因此做了它当时唯一能做的事情,并要求将任何变量直接连接到动态 SQL 中。

那时,ezSQL(以及 WordPress)used https://core.trac.wordpress.org/browser/trunk/b2-include/wp-db.php?rev=114#L67 PHP's mysql_escape_string() https://secure.php.net/manual/en/function.mysql-escape-string.php函数来转义此类文字,因此不知道数据库连接的实际编码(这一威胁仅在 PHP 本身中得到解决)就在几个月前 https://secure.php.net/releases/4_3_0.php).

这仍然是 WordPress 针对 SQL 注入的(唯一)防御近两年来 https://codex.wordpress.org/Version_1.5,于是它switched https://core.trac.wordpress.org/changeset/1545使用(更不安全)addslashes() https://secure.php.net/manual/en/function.addslashes.php逃跑——这种情况随后仍然存在四年多了 https://codex.wordpress.org/Version_2.8 until mysql_real_escape_string() https://secure.php.net/manual/en/function.mysql-real-escape-string.php was finally utilised https://core.trac.wordpress.org/changeset/10597(尽管wpdb::prepare() https://developer.wordpress.org/reference/classes/wpdb/prepare/曾经是介绍 https://core.trac.wordpress.org/changeset/5778 in 临时的 https://codex.wordpress.org/Version_2.3)!

那时不是为了another5年 https://codex.wordpress.org/Version_3.9直到WordPress开始出现using https://core.trac.wordpress.org/changeset/27250一个司机capable本机语句准备(即MySQLi https://secure.php.net/manual/en/book.mysqli.php):现在就在不到两年前,正如@naththedeveloper已经指出了 https://stackoverflow.com/questions/38206366/what-can-i-do-to-get-actual-prepared-statements-in-wordpress#comment63837372_38206366, 中的讨论票#21663 https://core.trac.wordpress.org/ticket/21663表明使用本机准备好的语句甚至可能不在待办事项列表中。

现状

不幸的是,由于 MySQLi 对象是受保护成员 https://core.trac.wordpress.org/browser/tags/4.5.3/src/wp-includes/wp-db.php?rev=37837#L556 of the wpdb没有 getter 的类(并且在内部分配实例化期间 https://core.trac.wordpress.org/browser/tags/4.5.3/src/wp-includes/wp-db.php?rev=37837#L1467),您无法将本机准备好的语句与 WordPress 的数据库连接一起使用(至少,不修改/替换wpdb与你自己的班级)。

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

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

或者我的担心是没有根据的?

尽管本机语句准备很出色(并且我同意它确实应该成为任何新项目中针对 SQL 注入的默认防御策略),但它确实还具有它的缺点 http://blog.ulf-wendel.de/2008/pdo_mysqlnd-prepared-statements-again/#procon。小心转义变量以用作 SQL 文字(例如,通过 PDO 的预准备语句模拟完成;这就是wpdb::prepare()这些天尝试交付)should能够抵抗所有已知的攻击...

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我该怎么做才能在 WordPress 中获得实际的准备好的语句 的相关文章

  • Yii 使用 ajax 进行分页

    我需要使用ajax启用分页 我的代码 控制器 更新内容ajax function actionIndex dataProvider new CActiveDataProvider News array pagination gt array
  • MaxListenersExceededWarning:检测到可能的 EventEmitter 内存泄漏。添加了 11 条消息列表。使用emitter.setMaxListeners()来增加限制

    我知道这可能会标记为重复的解决方案 但堆栈溢出的解决方案对我不起作用 Problem node 5716 MaxListenersExceededWarning Possible EventEmitter memory leak detec
  • Mysql用in语句限制

    我正在写一个查询 SELECT user bookmarks id as user bookmark id bookmark id user bookmarks user id bookmark url bookmark website b
  • 如何检测Mysql/innodb中的死锁?

    我知道在 Innodb 中使用事务时不可避免地会发生死锁 并且如果应用程序代码正确处理死锁 它们是无害的 正如手册所说 只需再试一次 所以我想知道 如何检测死锁 死锁是否会发出一些特殊的 mysql 错误号 如果重要的话 我正在使用 PHP
  • 如何使用 php 下载/打印页面的特定部分

    我有一个 HTML 页面如下 Lorem Ipsum is simply dummy text of the printing and typesetting industry Lorem Ipsum has been the indust
  • 是否可以使用 PHP 重定向发送 POST 数据?

    更新 这不是重复的如何使用 PHP 发送 POST 请求 https stackoverflow com questions 5647461 how do i send a post request with php 那里的解决方案对我不起
  • mysql自动存储记录创建时间戳

    mysql 有什么方法可以在创建记录时自动将时间戳存储在记录行中 我试图使用时间戳 数据类型 和 current timestamp 作为默认值 但后来意识到每次更新记录时都会更新 我只需要一些可以存储创建时间戳的东西 Thanks Set
  • 在 Wordpress 站点中进行 AJAX 调用时出现问题

    我在使用 Wordpress 站点功能的 AJAX 部分时遇到了一些问题 该功能接受在表单上输入的邮政编码 使用 PHP 函数来查找邮政编码是否引用特定位置并返回到该位置的永久链接 我的第一个问题是关于我构建的表单 现在我的表单操作是空白的
  • 随机组合 MySQL 数据库中的两个单词

    我有一个包含名词和形容词的数据库 例如 id type word 1 noun apple 2 noun ball 3 adj clammy 4 noun keyboard 5 adj bloody ect 我想创建一个查询 它将抓取 10
  • PHP 与 MySQL 查询性能( if 、 函数 )

    我只看到这个artice http www onextrapixel com 2010 06 23 mysql has functions part 5 php vs mysql performance 我需要知道在这种情况下什么是最好的表
  • Mysql插入表后不显示右单引号(’)

    我有一个名为 测试 的表 我插入了一行 其中包含unicode字符右单引号 0x2019在名称字段中 SQL insert into Testing values Sno Name Address insert into Testing v
  • 在 android 中建立与 MySQL 的池连接

    我需要从我的 Android 应用程序访问 MySQL 数据库 现在所有的工作都通过 DriverManager getConnection url 等等 但我必须从多个线程访问数据库 所以我必须使用连接池 问题1 是 com mysql
  • 覆盖控制器 Symfony 3.4/4.0

    我目前正在尝试覆盖 FOSUserBundle 中的控制器 在新的文档中 https symfony com doc 3 4 bundles override html https symfony com doc 3 4 bundles o
  • mysql排序和排名语句

    我需要一些 mysql 语句的帮助 我的表 1 有 7 列 表 2 有 8 列 额外的列名为排名 我的语句应该是这样的 从表 1 中选择全部 然后按 用户数 排序 将其插入表 2 中并排名开始 1 2 3 等 table 1 usernam
  • 通过 $_SESSION 从一个脚本发送到另一个脚本期间数据丢失

    我正在尝试将一个充满属性的对象从一个 PHP 发送到另一个 PHP SESSION object obj where obj是一个用 foreach 循环指定的对象 foreach array of objects as obj SESSI
  • 表单提交后如何保留选择字段中的选定值?

    我有一个用于将票证上传到数据库的主页 我有一个选择字段 我想保留用户在提交表单之前选择的值 但它没有发生 这是我选择字段的代码
  • Doctrine EntityManager 清除嵌套实体中的方法

    我想用学说批量插入处理 http doctrine orm readthedocs org en latest reference batch processing html为了优化大量实体的插入 问题出在 Clear 方法上 它表示此方法
  • 简单的 PHP 表单:电子邮件附件(代码 Golf)

    想象一下 一个用户想要在其网站上放置一个表单 该表单将允许网站访问者上传一个文件和一条简单的消息 该消息将立即通过电子邮件发送 即 该文件未存储在服务器上 或者如果该文件存储在服务器上 仅暂时 作为文件附件 并在邮件正文中添加注释 查看更多
  • 如何使用 PHPExcel 库从 Excel 获取日期

    我正在尝试使用 PHPExcel 从 Excel 获取日期 但我没有得到日期 我得到的字符串值不是 1970 以来的秒数 我尝试过的代码是 InvDate trim excel gt getActiveSheet gt getCell B
  • post php mysql 的拆分关键字

    我有一个表存储帖子 ID 它的标签如下 Post id Tags 1 keyword1 keyword2 keyword3 我想循环遍历该表中的每一行并执行以下操作 将关键字1 关键字2 关键字3放入新表中 word id word val

随机推荐