2013-04-24 46 views
0

我正在一个网站上工作,该网站允许用户使用编辑器输入html格式的内容。如何过滤XSS,但仍允许基本格式化标记

但是,我担心XSS注射。编辑器显然使用JavaScript过滤客户端的信息,但我几乎不能相信这一点,因为最好的做法是不信任客户端。

我希望能够到白名单中的某些标记,如:

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

,但仍执行针对XSS攻击输入一个安全过滤器。

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

是否有可能做到这一点的功能?它会安全吗?

+0

找到一个像样的BB解析器类[可能是XSS的常见防御方法是什么?](http://stackoverflow.com/questions/3129899/what-are-the-common-defenses-against -xss) – Quentin 2013-04-24 13:47:12

+0

可能重复[什么是用PHP清理用户输入的最佳方法?](http://stackoverflow.com/questions/129677/whats-the-best-method-for-sanitizing-user-input-with -php) – 2013-04-26 04:55:04

回答

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

+0

谢谢你已经决定休息:) – 2013-04-24 13:57:04

相关问题