SuperAPI AI 工具集

xss-prevention

安全与审计

查看项目

更新于 10-15 12:18

技能介绍

用途

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/ 目录下的指南。