django-xss-cleaner 是一个基于 bleach 的 Django XSSFilter 工具包,实现了对 GET 和 POST 请求参数的 XSS 白名单过滤功能。包中内置了部分白名单 HTML 标签、属性设置,同时也支持自定义扩展。项目地址,https://github.com/shaowenchen/django-xss-cleaner
1. settings.py 安装和配置说明
- 添加中间件
xss_cleaner.middlewares.CleanXssMiddleware
到 settings 中
|
|
建议将 CleanXssMiddleware 放在尽量靠前的位置,最好是第一个。这是为了保证后端获取的数据都通过了 XSS 过滤,避免 XSS 向量被注入。
- 配置 Clean XSS 级别 [可选]
默认配置为 ‘HIGHT’,可选参数:[‘LOW’, ‘HIGH’]
|
|
如果设置为 ‘HIGHT’ ,允许的标签和属性为
|
|
如果设置为 ‘LOW’ ,允许的标签和属性为
|
|
参数的含义,在下面会有介绍。
- 新增自定义白名单 [可选]
增量式添加新的标签和属性到白名单。
|
|
参数说明:
- tags (list) – 允许的标签,不在白名单的标签被转义
- attributes (dict) – 允许的属性,不在白名单的属性被删除
- styles (list) – 允许的样式,不在白名单的样式被删除
- strip (bool) – 是否剔除转义后的字符
- strip_comments (bool) – 是否剔除 HTML comments
BLEACH_WHITE_LIST 中的标签、属性、样式,将会以增量的形式增加在 Clean XSS 级别允许的白名单上。如果设置了 strip、strip_comments ,将覆盖默认设置。
- 是否打印或记录转义 [可选]
为了方便调试,记录 XSS Filter 的信息,提供一个开关:
|
|
默认值为 True,可选值为 [True ,False]
如果是本地开发,转换日志将直接 print 在 Console。如果是线上,将打印为 warning 日志。
2. xss_cleaner 豁免装饰器
xss_cleaner 包提供了两个装饰器,用于豁免 XSS Filter 处理。
- escape_clean,提供 View 级别的豁免。
|
|
- escape_clean_param,提供参数级别的豁免。
|
|
3. xss_cleaner 处理示例
下面使用的是默认配置: XSS_LEVEL= ‘HIGH’
|
|
下面使用的是默认配置: XSS_LEVEL= LOW’
|
|