htmlentities
是防止PHP中XSS的最佳解决方案吗?另外,我想允许简单的代码,例如b
,i
,a
和img
。实现这一目标的最佳解决方案是什么?我确实考虑过bbcode,但发现如果没有正确实现我也会有XSS问题。我该怎么办?欢迎任何好的第三方图书馆。
编辑:
我刚试过HTML Purifier,但在这种情况下它失败了。 Just see this example
答案 0 :(得分:3)
为此,我会选择HTML Purifier,是的,您也可以在那里指定白名单标签。
HTML Purifier符合标准 用PHP编写的HTML过滤器库。 HTML Purifier不仅会删除所有内容 恶意代码(俗称为 XSS)经过全面审核,
它安全而宽松的白名单 还将确保您的文件 符合标准,只有一些东西 可以全面实现 了解W3C的规范。
我知道PHP 语言中有某些功能,但我更喜欢专用的解决方案。
答案 1 :(得分:2)
查看自定义标记语言,例如markdown(由stackoverflow使用),reStructuredText,textile或类似lightweight markup languages
答案 2 :(得分:1)
尝试使用此代码(它允许<i>
,<b>
和<del>
):
<?php
$html = '<b>Inline <del>context <div>No block allowed <great going </div></del></b>';
function escapeEveryOther(&$v, $k) {
if($k % 2 == 0) {
$v = htmlspecialchars($v);
}
}
$parts = preg_split('`(</?(?:b|i|del)>)`is', $html, -1, PREG_SPLIT_DELIM_CAPTURE);
array_walk($parts, 'escapeEveryOther');
$html = implode('', $parts);
然后将$html
传递给HTMLPurifier以修复不匹配的代码开头和关闭。