如何过滤掉XSS,但仍然允许基本的格式化标记



我在一个允许人们使用编辑器输入html格式内容的网站上工作。

然而,我担心XSS注射。编辑器显然使用javascript在客户端过滤信息,但我几乎不能相信它,因为不相信客户端任何东西都是好的做法。

我希望能够将某些标签列入白名单,例如:

<br> <img src=""> <p> <b>

,但仍然对输入执行安全过滤,以防止XSS攻击。

我考虑使用http://php.net/manual/en/function.strip-tags.php,但我注意到img标签是XSS黑客的最爱之一。

是否有可能创建一个函数来执行此操作?它安全吗?

使用html净化器:

$config = HTMLPurifier_Config::createDefault();
// the tags and attributes you want to allow
$config->set('HTML.Allowed', 'br,img[src],p,b');
$purifier = new HTMLPurifier($config);
print $purifier->purify($inputHtml);

另一个可能的解决方案是加载你的HTML到DomDocument,删除不需要的元素或属性,并获得更新的HTML

我还是更喜欢BB代码。您可以在http://phpclasses.org

找到一个像样的BB解析器类。

最新更新