需求: 富文本框总数被恶意用户输入script标签,使得加载其它页面,欺诈我的上帝(用户), 简单过滤script,又会使用embed、iframe等可以加载第三方页面的有危害标签。
问题: 有什么方法,可以完善过滤掉用户输入的所有富文本内容,只留下没有危害的富文本内容?
方案:
基础知识:
富文本: 就是一个框需要让用户可以输入html一些标签,以达到美化界面的功能。
恶意标签: 插入这些标签,可以改变页面原来的内容,还有可能控制整个页面。进而实现钓鱼、挂马或盗取数据等危害比较大的事情。
解决方案: 就是设定一个标签和属性白名单(因为即使白名单的标签img,里面的属性-onerror等也可能导致执行javascript,也是非常危险). 对用户输入进行检查,只允许白名单中的标签和属性才能通过检查,否则就拒绝用户请求(对于恶意用户不要提供友好的用户体验,以防止防御被绕过,比如过滤危险标签 script,当用户输入sscriptcript时,就会导致被绕过)
由于不同开发程序使用的不一样,分开讨论。
PHP-富文本过滤
百度一下 php富文本过滤,很容易找到一个开源库-HTMLPurifier。
测试过程:
1. 下载开源库 官网地址:
http://htmlpurifier.org/
测试时下载的最新版 4.9.1版本
2. 使用:
将下载htmlpurifier库,解压到webroot目录下,并且将文件夹重命名为-htmlpurifier,即
webroot/htmlpurifier/library/HTMLPurifier.includes.php.
新建一个测试页面test.php,内容如下:
居然不能贴代码 差评