【问题标题】:HTML purifier not working with $_POST before inserting into mysql在插入 mysql 之前,HTML 净化器不能与 $_POST 一起使用
【发布时间】:2014-08-09 20:35:03
【问题描述】:

我在 wordpress 博客上有这个text editor,我想在插入数据库之前使用HTML Purifier 来净化用户的输入。文本编辑器是一个 iframe,所以我通过使用来获取内容

   document.getElementById("comments_comments").value=$("#textEditor").contents().find("body").html();

当用户点击提交按钮时。

我遵循 html 净化器的基本指令,如下所示:

  if (isset($_SESSION["user"]) && $_SESSION["user"] != "") 
  {   
    require_once '/path/to/HTMLPurifier.auto.php';

    $config = HTMLPurifier_Config::createDefault();
    $purifier = new HTMLPurifier($config);
    $comments = $purifier->purify($_POST["comments"]);
    $sql = $wpdb->prepare ("INSERT INTO mytable SET comments = %s",array($comments));
    $wpdb->query($sql);
  }

但是代码根本没有任何作用。我期待 <script> 标记完全删除,但它们仍以 & lt ;script & gt; 的形式存储在数据库中。我认为这是 wpdb prepare 语句的工作。上面的配置是不是对$_POST不起作用?任何帮助将不胜感激。

【问题讨论】:

  • 如果您想简单地清理用户输入,htmlspecialchars() 就可以了。如果您想删除所有标签(仅当您将格式从 HTML 转换为 TXT 时才适用) striptags() 然后 htmlspecialchars() 就可以了。无论如何,HTML Purifier 太过分了。
  • @Xabier,不过我想保留 html 标签。还有其他选择吗?
  • 我明白了.. 然后,检查这个答案stackoverflow.com/questions/5512712/sanitizing-html-input

标签: php jquery mysql wordpress htmlpurifier


【解决方案1】:

首先确定,你真的不允许这个标签:

$config->set('HTML.ForbiddenElements', ['script']));

你说的是在数据库中以这个结尾:

& lt ;script & gt ;

您确定,您还没有使用htmlspecialchars()?也许有这样的东西?

foreach ($_POST as $key => $value) {
    $_POST[$key] = htmlspecialchars($value)
}

我 99.99% 确定,这与数据库无关。如果你不插入数据库,而是使用var_dump($comment),那也是一样的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-20
    • 2013-10-17
    • 1970-01-01
    • 1970-01-01
    • 2018-04-20
    • 2017-08-15
    • 2013-01-19
    相关资源
    最近更新 更多