Web 内容安全策略(CSP)
字数 1257 2025-11-22 22:22:16

Web 内容安全策略(CSP)

  1. CSP 的基本定义
    Web 内容安全策略(CSP)是一种通过 HTTP 响应头或 <meta> 标签定义的浏览器安全机制,用于限制页面可加载的资源类型(如脚本、样式、图片等),从而减少跨站脚本攻击(XSS)和数据注入攻击的风险。例如,通过 CSP 可以禁止页面执行内联 JavaScript(如 <script>alert('xss')</script>)。

  2. CSP 的核心指令与语法
    CSP 通过指令(directives)定义资源加载规则,常用指令包括:

    • default-src 'self':默认仅允许加载同源资源。
    • script-src 'none':禁止所有脚本执行。
    • img-src https::仅允许通过 HTTPS 加载图片。
    • connect-src 'self' api.example.com:允许向同源和指定域名发起 AJAX 请求。
      指令值可组合使用,例如:
    Content-Security-Policy: script-src 'self' 'unsafe-inline'; style-src 'self' cdn.example.com;  
    
  3. CSP 的部署方式

    • HTTP 响应头(推荐):服务器返回头部字段 Content-Security-Policy
    • HTML 元标签:在 <head> 中插入 <meta http-equiv="Content-Security-Policy" content="script-src 'self'">,适用于无法控制服务器配置的场景。
  4. CSP 的防御原理与 XSS 缓解
    CSP 通过白名单机制阻断非法资源加载:

    • 若攻击者向页面注入 <script src="http://malicious.com/evil.js">,但 CSP 设置为 script-src 'self',浏览器会拒绝加载该脚本。
    • 可禁用内联事件(如 onclick)和内联样式,强制使用外部文件或哈希/随机数验证合法内容。
  5. 高级策略:哈希与非ce
    为平衡安全性与灵活性,CSP 支持以下方式允许特定内联资源:

    • 哈希(Hash):计算内联脚本的 SHA256 哈希值,例如 script-src 'sha256-abc123...'
    • 随机数(Nonce):为合法内联脚本生成一次性随机数,例如 <script nonce="R4nd0m"> 配合 script-src 'nonce-R4nd0m'
  6. CSP 报告机制与监控
    通过 report-urireport-to 指令收集违规行为:

    • 策略模式分为 enforce(阻塞违规)和 report-only(仅记录不阻塞)。
    • 示例:
      Content-Security-Policy-Report-Only: default-src 'self'; report-uri /csp-report-endpoint;  
      
      违规报告会以 JSON 格式发送至指定端点,供安全分析使用。
  7. 实际部署注意事项

    • 逐步采用:先使用 report-only 模式测试策略,避免破坏现有功能。
    • 避免过度宽松:如非必要,不应使用 'unsafe-inline''unsafe-eval'
    • 结合其他安全机制:CSP 需与输入验证、输出编码等共同构建纵深防御体系。
Web 内容安全策略(CSP) CSP 的基本定义 Web 内容安全策略(CSP)是一种通过 HTTP 响应头或 <meta> 标签定义的浏览器安全机制,用于限制页面可加载的资源类型(如脚本、样式、图片等),从而减少跨站脚本攻击(XSS)和数据注入攻击的风险。例如,通过 CSP 可以禁止页面执行内联 JavaScript(如 <script>alert('xss')</script> )。 CSP 的核心指令与语法 CSP 通过指令(directives)定义资源加载规则,常用指令包括: default-src 'self' :默认仅允许加载同源资源。 script-src 'none' :禁止所有脚本执行。 img-src https: :仅允许通过 HTTPS 加载图片。 connect-src 'self' api.example.com :允许向同源和指定域名发起 AJAX 请求。 指令值可组合使用,例如: CSP 的部署方式 HTTP 响应头 (推荐):服务器返回头部字段 Content-Security-Policy 。 HTML 元标签 :在 <head> 中插入 <meta http-equiv="Content-Security-Policy" content="script-src 'self'"> ,适用于无法控制服务器配置的场景。 CSP 的防御原理与 XSS 缓解 CSP 通过白名单机制阻断非法资源加载: 若攻击者向页面注入 <script src="http://malicious.com/evil.js"> ,但 CSP 设置为 script-src 'self' ,浏览器会拒绝加载该脚本。 可禁用内联事件(如 onclick )和内联样式,强制使用外部文件或哈希/随机数验证合法内容。 高级策略:哈希与非ce 为平衡安全性与灵活性,CSP 支持以下方式允许特定内联资源: 哈希(Hash) :计算内联脚本的 SHA256 哈希值,例如 script-src 'sha256-abc123...' 。 随机数(Nonce) :为合法内联脚本生成一次性随机数,例如 <script nonce="R4nd0m"> 配合 script-src 'nonce-R4nd0m' 。 CSP 报告机制与监控 通过 report-uri 或 report-to 指令收集违规行为: 策略模式分为 enforce (阻塞违规)和 report-only (仅记录不阻塞)。 示例: 违规报告会以 JSON 格式发送至指定端点,供安全分析使用。 实际部署注意事项 逐步采用:先使用 report-only 模式测试策略,避免破坏现有功能。 避免过度宽松:如非必要,不应使用 'unsafe-inline' 或 'unsafe-eval' 。 结合其他安全机制:CSP 需与输入验证、输出编码等共同构建纵深防御体系。