用途
XSS Prevention 用于防范跨站脚本(Cross-Site Scripting,XSS)攻击。它通过输入净化、输出编码和内容安全策略(CSP)等手段,帮助开发者在处理用户生成内容时降低 XSS 风险。
适用场景
根据资料,该技能适用于以下场景:
- 展示用户生成内容
- 富文本编辑器
- 评论系统
- 搜索功能
- 动态 HTML 生成
- 模板渲染
主要能力
该技能围绕以下安全机制展开:
- 输入净化(input sanitization)
- 输出编码(output encoding)
- 内容安全策略(CSP)响应头
- 安全编码实践
资料提供了 Node.js、Python、React 以及内容安全策略的参考实现指南,位于 references/ 目录中。
使用方式
资料给出了一个最小可运行示例,文件名为 xss-prevention.js,使用 dompurify、jsdom 和 he 三个依赖。示例中创建了 JSDOM 窗口并初始化 DOMPurify,定义了一个 XSSPrevention 类,其中包含两个静态方法:
- encodeHTML(str):使用 he.encode 进行 HTML 实体编码,配置为 useNamedReferences: true、encodeEverything: false,注释说明这是对文本内容最安全的方式。
- sanitizeHTML(dirty):用于净化 HTML,适用于富文本内容,配置中通过 ALLOWED_TAGS 指定允许的标签(资料中该部分被截断,完整实现需参见参考指南)。
示例代码:
// xss-prevention.js
const createDOMPurify = require("dompurify");
const { JSDOM } = require("jsdom");
const he = require("he");
const window = new JSDOM("").window;
const DOMPurify = createDOMPurify(window);
class XSSPrevention {
/**
* HTML Entity Encoding - Safest for text content
*/
static encodeHTML(str) {
return he.encode(str, {
useNamedReferences: true,
encodeEverything: false,
});
}
/**
* Sanitize HTML - For rich content
*/
static sanitizeHTML(dirty) {
const config = {
ALLOWED_TAGS: [
// ... (see reference guides for full implementation)
最佳实践
资料列出了应做与不应做的清单。
应做(DO):
- 默认对输出进行编码
- 使用模板引擎
- 实施 CSP 响应头
- 净化富文本内容
- 校验 URL
- 使用 HTTPOnly Cookie
- 定期进行安全测试
- 使用安全的框架
不应做(DON'T):
- 信任用户输入
- 直接使用 innerHTML
- 跳过输出编码
- 允许内联脚本
- 使用 eval()
- 混用上下文(HTML/JS)
限制
资料中未提供关于收费、价格、平台支持范围、具体效果指标或完整实现细节的信息;示例中的 ALLOWED_TAGS 配置被截断,完整实现需参考其 references/ 目录下的指南。