内容安全策略(CSP)的部署与绕过技术详解
字数 1792 2025-12-01 06:21:51

内容安全策略(CSP)的部署与绕过技术详解

题目描述

内容安全策略(Content Security Policy,CSP)是一种通过HTTP响应头(如Content-Security-Policy)定义的安全机制,用于限制网页中可加载的资源(如脚本、样式、图片等),从而减少XSS、数据注入等攻击的风险。面试题可能围绕以下方面展开:

  1. CSP的基本语法和指令(如default-srcscript-srcstyle-src)。
  2. CSP的部署方法(如何通过响应头或<meta>标签配置)。
  3. 常见CSP绕过技术(如利用JSONP端点、AngularJS沙箱逃逸、域名白名单缺陷等)。

解题过程与知识点讲解

步骤1:理解CSP的核心目标

  • 作用:通过白名单机制控制资源加载源,防止恶意脚本执行。例如,配置script-src 'self'仅允许加载同源脚本。
  • 关键指令
    • default-src:默认策略,适用于未单独指定的资源类型。
    • script-src:控制JavaScript的加载源(如'self'https:nonce-xxx)。
    • style-src:控制CSS资源。
    • connect-src:限制XMLHttpRequest、WebSocket等连接的目标。

步骤2:CSP的部署示例

假设需防御XSS,配置一个严格策略:

Content-Security-Policy: default-src 'self'; script-src 'self' 'nonce-abc123'; object-src 'none';  
  • 解释
    • script-src 'self' 'nonce-abc123':仅允许同源脚本或带nonce="abc123"属性的<script>标签执行。
    • object-src 'none':完全禁止<object><embed>等插件资源。
  • 部署方式
    • HTTP响应头(首选):由服务器在响应中返回。
    • <meta>标签(较少用):<meta http-equiv="Content-Security-Policy" content="...">

步骤3:CSP的常见绕过技术

即使配置CSP,攻击者仍可能通过以下方式绕过:

  1. 利用白名单中的不安全域名

    • 场景:若策略包含script-src 'self' https://cdn.example.com,且cdn.example.com存在开放上传功能,攻击者可上传恶意脚本并通过<script src="https://cdn.example.com/malicious.js">执行。
    • 防御:严格审核白名单域名的安全性。
  2. JSONP端点滥用

    • 原理:若CSP允许script-src包含某个提供JSONP的域名(如https://api.example.com/search?callback=alert(1)//),攻击者可构造恶意回调函数执行代码。
    • 示例
      <script src="https://api.example.com/search?callback=alert(document.domain)//"></script>  
      
    • 防御:禁用JSONP或严格校验回调函数名。
  3. AngularJS沙箱逃逸(CSP宽松时)

    • 条件:CSP允许unsafe-eval或特定AngularJS库。
    • 原理:AngularJS的模板注入可通过构造如{{1+1}}的表达式执行代码,结合CSP缺陷实现绕过。
    • 防御:避免使用unsafe-eval,升级AngularJS版本。
  4. 通过<link>或CSS注入

    • style-src配置宽松,攻击者可能通过CSS表达式(如IE的expression())或窃取数据的CSS属性(如@import)泄露信息。

步骤4:进阶防御与检测

  • Nonce和Hash机制
    • Nonce:每次页面生成随机数(如nonce-abc123),仅匹配的脚本可执行。
    • Hash:对脚本内容计算哈希值(如sha256-xxx),仅允许哈希匹配的脚本。
  • 报告机制:通过report-urireport-to收集CSP违规报告,辅助排查配置问题。
  • 严格模式:优先使用default-src 'none',再按需开放具体资源类型。

总结

  • CSP的有效性:依赖严格的白名单设计和避免使用unsafe-inlineunsafe-eval等宽松指令。
  • 绕过技术的根源:往往源于配置错误或对第三方服务的过度信任。
  • 面试考察点:理解CSP原理、部署实践、常见绕过场景及应对措施。
内容安全策略(CSP)的部署与绕过技术详解 题目描述 内容安全策略(Content Security Policy,CSP)是一种通过HTTP响应头(如 Content-Security-Policy )定义的安全机制,用于限制网页中可加载的资源(如脚本、样式、图片等),从而减少XSS、数据注入等攻击的风险。面试题可能围绕以下方面展开: CSP的基本语法和指令 (如 default-src 、 script-src 、 style-src )。 CSP的部署方法 (如何通过响应头或 <meta> 标签配置)。 常见CSP绕过技术 (如利用JSONP端点、AngularJS沙箱逃逸、域名白名单缺陷等)。 解题过程与知识点讲解 步骤1:理解CSP的核心目标 作用 :通过白名单机制控制资源加载源,防止恶意脚本执行。例如,配置 script-src 'self' 仅允许加载同源脚本。 关键指令 : default-src :默认策略,适用于未单独指定的资源类型。 script-src :控制JavaScript的加载源(如 'self' 、 https: 、 nonce-xxx )。 style-src :控制CSS资源。 connect-src :限制XMLHttpRequest、WebSocket等连接的目标。 步骤2:CSP的部署示例 假设需防御XSS,配置一个严格策略: 解释 : script-src 'self' 'nonce-abc123' :仅允许同源脚本或带 nonce="abc123" 属性的 <script> 标签执行。 object-src 'none' :完全禁止 <object> 、 <embed> 等插件资源。 部署方式 : HTTP响应头 (首选):由服务器在响应中返回。 <meta> 标签 (较少用): <meta http-equiv="Content-Security-Policy" content="..."> 。 步骤3:CSP的常见绕过技术 即使配置CSP,攻击者仍可能通过以下方式绕过: 利用白名单中的不安全域名 场景 :若策略包含 script-src 'self' https://cdn.example.com ,且 cdn.example.com 存在开放上传功能,攻击者可上传恶意脚本并通过 <script src="https://cdn.example.com/malicious.js"> 执行。 防御 :严格审核白名单域名的安全性。 JSONP端点滥用 原理 :若CSP允许 script-src 包含某个提供JSONP的域名(如 https://api.example.com/search?callback=alert(1)// ),攻击者可构造恶意回调函数执行代码。 示例 : 防御 :禁用JSONP或严格校验回调函数名。 AngularJS沙箱逃逸(CSP宽松时) 条件 :CSP允许 unsafe-eval 或特定AngularJS库。 原理 :AngularJS的模板注入可通过构造如 {{1+1}} 的表达式执行代码,结合CSP缺陷实现绕过。 防御 :避免使用 unsafe-eval ,升级AngularJS版本。 通过 <link> 或CSS注入 若 style-src 配置宽松,攻击者可能通过CSS表达式(如IE的 expression() )或窃取数据的CSS属性(如 @import )泄露信息。 步骤4:进阶防御与检测 Nonce和Hash机制 : Nonce :每次页面生成随机数(如 nonce-abc123 ),仅匹配的脚本可执行。 Hash :对脚本内容计算哈希值(如 sha256-xxx ),仅允许哈希匹配的脚本。 报告机制 :通过 report-uri 或 report-to 收集CSP违规报告,辅助排查配置问题。 严格模式 :优先使用 default-src 'none' ,再按需开放具体资源类型。 总结 CSP的有效性 :依赖严格的白名单设计和避免使用 unsafe-inline 、 unsafe-eval 等宽松指令。 绕过技术的根源 :往往源于配置错误或对第三方服务的过度信任。 面试考察点 :理解CSP原理、部署实践、常见绕过场景及应对措施。