README.zh

NPM versionarrow-up-right Node.js CIarrow-up-right Test coveragearrow-up-right David depsarrow-up-right node versionarrow-up-right npm downloadarrow-up-right npm licensearrow-up-right

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

xss

xss是一个用于对用户输入的内容进行过滤,以避免遭受 XSS 攻击的模块(什么是 XSS 攻击?arrow-up-right)。主要用于论坛、博客、网上商店等等一些可允许用户录入页面排版、格式控制相关的 HTML 的场景,xss模块通过白名单来控制允许的标签及相关的标签属性,另外还提供了一系列的接口以便用户扩展,比其他同类模块更为灵活。

项目主页: http://jsxss.com

在线测试: http://jsxss.com/zh/try.html


特性

  • 白名单控制允许的 HTML 标签及各标签的属性

  • 通过自定义处理函数,可对任意标签及其属性进行处理

参考资料

性能(仅作参考)

测试代码参考 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 属性,则它的值会通过cssfilterarrow-up-right 模块处理。 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