http 协议中的 CSP 是什么?
参考答案:
什么是 CSP?
CSP (Content Security Policy) 是 HTTP 协议中的一种安全功能,全称为 内容安全策略。它用于帮助浏览器检测和阻止某些类型的安全威胁,例如 跨站脚本攻击(XSS) 和 数据注入攻击。通过限制页面加载的内容来源,CSP 能够有效减少攻击面,提高 Web 应用的安全性。
CSP 的工作原理
- 定义策略:服务器通过 HTTP 响应头
Content-Security-Policy,或<meta>标签来定义 CSP 策略。 - 策略作用:浏览器根据定义的策略控制页面中可加载的资源(如脚本、样式、图片等)的来源。
- 检测与阻止:
- 如果资源或行为不符合策略,浏览器会阻止加载。
- 可通过策略开启“报告模式”,将违反策略的行为报告到指定的 URL。
CSP 的常见指令
CSP 策略由一组指令组成,每条指令控制特定类型资源的加载规则:
| 指令名 | 功能描述 | 示例 |
|---|---|---|
default-src | 默认资源加载策略,应用于未指定的其他类型资源 | default-src 'self' |
script-src | 控制脚本的加载来源,防止恶意脚本注入 | script-src 'self' 'unsafe-inline' |
style-src | 控制样式的加载来源 | style-src 'self' 'unsafe-inline' |
img-src | 控制图片的加载来源 | img-src 'self' data: |
font-src | 控制字体文件的加载来源 | font-src 'self' |
connect-src | 限制通过 fetch、XHR 等方式发起的网络请求 | connect-src api.example.com |
frame-src | 控制可嵌入框架(iframe)的来源 | frame-src 'self' |
report-uri | 指定报告 CSP 违规的 URL | report-uri /csp-report |
object-src | 限制 <object>、<embed> 或 <applet> 的资源加载 | object-src 'none' |
CSP 策略示例
1. 防止加载外部脚本
仅允许从当前域名加载脚本资源:
http
Content-Security-Policy: script-src 'self';2. 允许可信的第三方资源
允许加载 Google Analytics 脚本,但阻止其他外部脚本:
http
Content-Security-Policy: script-src 'self' https://www.google-analytics.com;3. 开启报告模式
仅报告违反 CSP 的行为,而不阻止加载:
http
Content-Security-Policy: default-src 'self'; report-uri /csp-report;CSP 的作用
防止 XSS 攻击:
- 阻止执行未授权的脚本。
- 限制恶意代码通过注入攻击运行。
限制恶意内容加载:
- 防止加载来自未信任来源的资源(如图片、脚本、iframe)。
减少数据泄露风险:
- 限制可以发起网络请求的目标域名。
CSP 的不足
- 配置复杂:对于大型 Web 应用,CSP 的配置可能较为繁琐。
- 兼容性问题:老旧浏览器可能不支持某些 CSP 功能。
- 灵活性受限:严格的 CSP 策略可能会影响某些合法的动态功能(如内联脚本)。
题目要点:
CSP 是一种强大的 Web 安全机制,能有效抵御 XSS 和资源注入攻击。然而,CSP 的正确配置需要根据实际业务场景权衡安全性与灵活性。通过合理使用 CSP,可以显著提高 Web 应用的安全性,同时为开发者提供实时的安全问题报告。