我希望我的论坛用户能够插入链接和其他允许的标签。例如,我想在帖子中显示以下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代码可能会让我感到脆弱。链接标记的样式和onmouseover属性也是如此。
什么是 简单 解决方案,以便在清除可能有害的字符和代码时允许帖子中的上述链接?无论如何,我可以将这两个PHP函数结合起来以 简单 方式执行此操作吗?
答案 0 :(得分:1)
您几乎需要使用功能齐全的HTML解析器和清理程序。整个工作流程如下:
<a>
标记,但要警惕onclick
属性以及类似内容来消毒所解析的内容。您可以查看HTML Purifier,如果它不符合您的需求,HTML Purifier网站会有comparison of other PHP sanitizers。我相信默认的HTML Purifier配置会保留链接。
答案 1 :(得分: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;
}