0

我希望我的论坛用户能够插入链接和其他允许的标签。例如,我希望帖子中的以下 HTML 按照作者的意图显示(即作为功能链接):

<a href="http://www.example.com" rel="nofollow">A page</a>

但是,我想保持一定程度的安全性,并且一直在阅读strip_tags () 和htmlspecialchars ()。起初我认为我可以将 strip_tags 与以下内容一起使用:

<?php $link_string = strip_tags($link_string, '<a>'); ?>

但是如果我理解正确,strip_tags 不会像 htmlspecialchars 那样保护我。例如,使用特殊字符的不正确 HTML 代码会使我容易受到攻击。link 标签的 style 和 onmouseover 属性也是如此。

在清除潜在有害字符和代码的同时允许帖子中的上述链接的最简单解决方案是什么?无论如何,我可以将这两个 PHP 函数组合起来以一种简单的方式做到这一点吗?

4

2 回答 2

1

您几乎需要使用功能齐全的 HTML 解析器和清理程序。整体工作流程如下:

  1. 用户输入他们的 HTML
  2. 你用解析器解析它
  3. 您可以通过仅保留您想要的内容(<a>标签,但要警惕onclick属性等)来清理解析的内容。

您可以查看HTML Purifier,如果它不符合您的需求,HTML Purifier 网站有其他 PHP sanitizers 的比较。我相信默认的 HTML Purifier 配置会保留链接。


强制性参考:请不要使用正则表达式来解析 HTML

于 2012-11-01T18:20:19.253 回答
0

我建议使用stripslashes(),如果这要进入数据库,还有mysql_real_escape_string()。

// without SQL.
       function safeData($data) {
        $returnData = stripslashes(strip_tags(htmlspecialchars(trim($data))));
        return $returnData; 
    }

// with SQL.
       function safeDataMySQL($data) {
        $returnData = mysql_real_escape_string(stripslashes(strip_tags(htmlspecialchars(trim($data)))));
        return $returnData; 
    }
于 2012-11-01T18:15:19.163 回答