【问题标题】:How to sanitize this particular mysql query?如何清理这个特定的 mysql 查询?
【发布时间】:2010-03-29 07:38:16
【问题描述】:

我得到了这个 SQL 查询,其中 post_title 取自 $_GET

$sql = "从帖子中选择 ID,其中帖子。post_title = '5-design-web-colourful'";

消毒并使其更安全的最佳方法是什么?

编辑:(根据要求)我正在尝试创建一个插件,用于隐藏特定类别(名为私人)及其所有未登录访客的帖子。我已经连接到“pre_get_posts”和“posts_selection”,能够控制如何为管理员、撰写它们的成员、其他成员和访客显示特定的帖子和类别。

类别必须不存在。所以它不能显示在前端的cat存档页面上。

我知道这与问题无关,因为 iask 只是如何清理帖子的名称/标题。仅此而已。

【问题讨论】:

  • 所以你要确保标识符没有被篡改。列名$wpdb->posts.post_title 是唯一的“问题”还是$wpdb->posts 也是一个问题?
  • VolkerK:我读到这个问题的意思是“5-desain-web-colourful”(即 post_title 字段的值)取自 $_GET。你能澄清一下吗,justjoe?
  • @all :抱歉,这是 wordpress 查询。我会先编辑那些 sql
  • 现在,在 this 版本的查询中,您不必清理 anything。这是一个没有可变部分的静态查询。您可能想要解释您想要达到的目标。现在越来越有可能这个问题是重复的。
  • 我并不无聊,但(没有冒犯)可能有点恼火......因为这个问题有些问题。这可能是一个很好的问题,但现在恕我直言,这是一团糟。它开始是一个 mysql 问题(只有标识符作为变量),你得到了通用的 mysql_escape_lalala 答案(此时可能是错误的),结果你真的想要变量 sql 参数,好吧 real_escape_string 可能是它。突然它变成了一个 wordpress 问题(-> real_escape_string 不好),WP_QUERY 参与其中。现在是 wpdb(可能是 WP_QUERY 和 wpdb)......来吧,它有点到处都是。

标签: php wordpress security


【解决方案1】:

假设您使用 MySQL,请使用 mysql_real_escape_string

【讨论】:

  • 对于您只插入的字符串,我可以添加:... $wpdb->posts.post_title = '".mysql_real_escape_string($str)."'";
【解决方案2】:

虽然这不能直接回答您的问题,但更好的方法是使用绑定参数。这可以保护您免受此类所有攻击媒介的侵害。

http://php.net/manual/en/pdo.prepared-statements.php

http://www.php.net/manual/en/pdostatement.bindparam.php

你的例子:

$sth = $dbh->prepare("select id from $wpdb->posts where $wpdb->posts.post_title = ?");
$sth->bindParam(1, $str);
$sth->execute();

注意:假设 $wpdb 是安全的!

【讨论】:

  • 在我看来,OP 是这个意思。
猜你喜欢
  • 1970-01-01
  • 2023-03-04
  • 1970-01-01
  • 1970-01-01
  • 2013-07-21
  • 2011-09-13
  • 2020-11-21
  • 2010-11-15
相关资源
最近更新 更多