README.zh
根据白名单过滤 HTML(防止 XSS 攻击)

xss是一个用于对用户输入的内容进行过滤,以避免遭受 XSS 攻击的模块(什么是 XSS 攻击?)。主要用于论坛、博客、网上商店等等一些可允许用户录入页面排版、格式控制相关的 HTML 的场景,xss模块通过白名单来控制允许的标签及相关的标签属性,另外还提供了一系列的接口以便用户扩展,比其他同类模块更为灵活。
项目主页: http://jsxss.com
在线测试: http://jsxss.com/zh/try.html
特性
白名单控制允许的 HTML 标签及各标签的属性
通过自定义处理函数,可对任意标签及其属性进行处理
参考资料
性能(仅作参考)
xss 模块:22.53 MB/s
[email protected] 模块的 xss()函数:6.9 MB/s
测试代码参考 benchmark 目录
安装
NPM
Bower
或者
使用方法
在 Node.js 中使用
在浏览器端使用
Shim 模式(参考文件 test/test.html):
AMD 模式(参考文件 test/test_amd.html):
说明:请勿将 URL https://rawgit.com/leizongmin/js-xss/master/dist/xss.js 用于生产环境。
使用命令行工具来对文件进行 XSS 处理
处理文件
可通过内置的 xss 命令来对输入的文件进行 XSS 处理。使用方法:
例:
在线测试
执行以下命令,可在命令行中输入 HTML 代码,并看到过滤后的代码:
详细命令行参数说明,请输入 $ xss -h 来查看。
自定义过滤规则
在调用 xss() 函数进行过滤时,可通过第二个参数来设置自定义规则:
如果不想每次都传入一个 options 参数,可以创建一个 FilterXSS 实例(使用这种方法速度更快):
options 参数的详细说明见下文。
白名单
通过 whiteList 来指定,格式为:{'标签名': ['属性1', '属性2']}。不在白名单上的标签将被过滤,不在白名单上的属性也会被过滤。以下是示例:
默认白名单参考 xss.whiteList。
自定义匹配到标签时的处理方法
通过 onTag 来指定相应的处理函数。以下是详细说明:
自定义匹配到标签的属性时的处理方法
通过 onTagAttr 来指定相应的处理函数。以下是详细说明:
自定义匹配到不在白名单上的标签时的处理方法
通过 onIgnoreTag 来指定相应的处理函数。以下是详细说明:
自定义匹配到不在白名单上的属性时的处理方法
通过 onIgnoreTagAttr 来指定相应的处理函数。以下是详细说明:
自定义 HTML 转义函数
通过 escapeHtml 来指定相应的处理函数。以下是默认代码 (不建议修改) :
自定义标签属性值的转义函数
通过 safeAttrValue 来指定相应的处理函数。以下是详细说明:
自定义 CSS 过滤器
如果配置中允许了标签的 style 属性,则它的值会通过cssfilter 模块处理。 cssfilter 模块包含了一个默认的 CSS 白名单,你可以通过以下的方式配置:
如果不想使用 CSS 过滤器来处理 style 属性的内容,可指定 css 选项的值为 false:
要获取更多的帮助信息可看这里:https://github.com/leizongmin/js-css-filter
快捷配置
去掉不在白名单上的标签
通过 stripIgnoreTag 来设置:
true:去掉不在白名单上的标签false:(默认),使用配置的escape函数对该标签进行转义
示例:
当设置 stripIgnoreTag = true时,以下代码
过滤后将输出
去掉不在白名单上的标签及标签体
通过 stripIgnoreTagBody 来设置:
false|null|undefined:(默认),不特殊处理'*'|true:去掉所有不在白名单上的标签['tag1', 'tag2']:仅去掉指定的不在白名单上的标签
示例:
当设置 stripIgnoreTagBody = ['script']时,以下代码
过滤后将输出
去掉 HTML 备注
通过 allowCommentTag 来设置:
true:不处理false:(默认),自动去掉 HTML 中的备注
示例:
当设置 allowCommentTag = false 时,以下代码
过滤后将输出
应用实例
允许标签以 data-开头的属性
运行结果:
允许名称以 x-开头的标签
运行结果:
分析 HTML 代码中的图片列表
运行结果:
去除 HTML 标签(只保留文本内容)
运行结果:
授权协议
Last updated