如何过滤XSS但仍允许基本格式标记

时间:2013-04-24 13:39:49

标签: php html editor xss input-sanitization

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

但是,我担心XSS注射。编辑显然使用Javascripts过滤客户端的信息,但我很难相信,因为这是一个很好的做法,无法从客户端那里得到任何信任。

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

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

但仍然针对XSS攻击执行输入的安全过滤。

我考虑使用http://php.net/manual/en/function.strip-tags.php,但我注意到img标签是XSS黑客之一&#39;收藏夹。

是否可以制作一个能够做到这一点的功能?它会安全吗?

2 个答案:

答案 0 :(得分:3)

使用HTMLPurifier

$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

答案 1 :(得分:0)

我仍然更喜欢BB代码。你可以在http://phpclasses.org

找到一个不错的BB解析器类