内容安全策略 (CSP) Bypass

Reading time: 41 minutes

tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE) 学习和实践 Azure 黑客技术:HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks

什么是 CSP

内容安全策略 (CSP) 被视为一种浏览器技术,主要旨在抵御诸如跨站脚本 (XSS) 等攻击。它通过定义并详细说明浏览器可以安全加载资源的路径和来源来发挥作用。这些资源包括图像、框架和 JavaScript 等元素。例如,策略可能允许从同一域(self)加载和执行资源,包括内联资源,以及通过诸如 evalsetTimeoutsetInterval 之类的函数执行字符串代码。

CSP 的实现通过 响应头 或在 HTML 页面中加入 meta 元素 来完成。遵循该策略后,浏览器会主动执行这些规定,并立即阻止任何被检测到的违规行为。

  • 通过响应头实现:
Content-Security-policy: default-src 'self'; img-src 'self' allowed-website.com; style-src 'self';
  • 通过 meta 标签实现:
xml
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src https://*; child-src 'none';">

响应头

CSP 可以通过以下响应头来强制执行或监控:

  • Content-Security-Policy: 强制执行 CSP;浏览器会阻止任何违规行为。
  • Content-Security-Policy-Report-Only: 用于监控;报告违规但不阻止。适合在预生产环境中进行测试。

定义资源

CSP 限制加载主动和被动内容的来源,控制诸如 inline JavaScript 的执行和 eval() 的使用等方面。示例策略如下:

bash
default-src 'none';
img-src 'self';
script-src 'self' https://code.jquery.com;
style-src 'self';
report-uri /cspreport
font-src 'self' https://addons.cdn.mozilla.net;
frame-src 'self' https://ic.paypal.com https://paypal.com;
media-src https://videos.cdn.mozilla.net;
object-src 'none';

指令

  • script-src: 允许 JavaScript 的特定来源,包括 URL、内联脚本,以及由事件处理器或 XSLT 样式表触发的脚本。
  • default-src: 当缺少特定抓取指令时,为获取资源设置默认策略。
  • child-src: 指定 web workers 和嵌入框架内容允许的资源。
  • connect-src: 限制可以通过 fetch、WebSocket、XMLHttpRequest 等接口加载的 URL。
  • frame-src: 限制用于框架的 URL。
  • frame-ancestors: 指定哪些来源可以嵌入当前页面,适用于诸如 、