课程笔记:CSP 内容安全策略
课程名称:计算机网络应用 核心摘要:本讲介绍 CSP(Content Security Policy,内容安全策略)作为防御 XSS 跨站脚本攻击的核心方案。CSP 是 HTTP 提供的额外安全层,通过服务端响应头向浏览器下发"白名单"策略,限定可执行脚本、图片、音视频等资源的合法来源,并可上报违规行为,从而削弱 XSS 与数据注入攻击。
一、 核心概念与原理
CSP(Content Security Policy,内容安全策略)
- HTTP 协议提供的一个额外安全层,本质是一种协议或标准,可由 Nginx 等服务器或浏览器具体实现。
- 被誉为"专门为解决 XSS 攻击而生的神器",可检测并削弱特定类型攻击(如 XSS 跨站脚本攻击、数据注入攻击等),能抵挡大部分初级、中级攻击。
XSS 攻击的本源
- 根源:浏览器对服务器返回内容无条件信任。
- 客户端认为服务端是安全的,故服务端返回的任何信息都会被执行,给恶意脚本可乘之机。
- 攻击者将带攻击性的脚本植入服务器返回内容,浏览器因信任来源而执行,从而产生安全问题。
CSP 的工作原理
- 服务端在响应信息中携带一个 CSP 响应头(Response Header),类似白名单。
- 该头部告知浏览器:哪些资源可以执行、哪些不能执行。
- 浏览器只信任"白名单"(指定有效区域)内的可执行资源来源,不符合策略的资源将被阻止下载/执行。
- 浏览器还可将违规信息**上报(report)**给服务端,便于通过报告日志定位被污染内容。
二、 技术细节与协议分析
1. CSP 通信流程
客户端(浏览器) 服务器
| |
|-------- 请求资源 ----------------->|
| |
|<--- 响应 HTML + CSP Header -------|
| (Header 内含白名单策略) |
| |
| 浏览器依据白名单执行资源 |
| 违规资源 → 阻止/上报 |
2. CSP 可管控的资源类型
CSP 不仅管控脚本,还可对以下资源指定来源策略:
| 资源类别 | 说明 |
|---|---|
| 脚本(JS) | 可执行脚本来源 |
| 图片 | 图片资源来源 |
| 网页 | 页面相关资源 |
| 音频 / 视频 | 媒体资源来源 |
3. CSP 的两种分类(响应头)
| 响应头名称 | 作用 | 行为 |
|---|---|---|
Content-Security-Policy | 强制限制 | 不符合策略的 Web 资源会被阻止下载/执行;若额外配置报告路径,阻止后也会上报 |
Content-Security-Policy-Report-Only | 仅报告 | 不阻止资源执行,仅将违反策略的记录上报到指定 URL;需指定报告路径 |
4. 企业最佳实践
- 既限制又报告:使用
Content-Security-Policy启用强制限制,同时配置报告路径,实现"阻止 + 上报"双重能力,是生产环境的最佳选项。 Report-Only模式适合灰度验证:先观察违规情况再决定是否升级为强制策略。
三、 实践应用与配置命令
本讲为概念引入,具体 CSP 配置指令(如
script-src、style-src、img-src、default-src、nonce、hash、self、unsafe-inline、unsafe-eval等)将在下一讲详细讲解。
响应头基本格式(示例预告)
# 强制限制 + 上报
Content-Security-Policy: default-src 'self'; script-src 'self' https://trusted.example.com; report-uri /csp-report
# 仅报告(不阻止)
Content-Security-Policy-Report-Only: default-src 'self'; report-uri /csp-report
四、 重点与难点提示
- 重点概念:CSP 全称 Content Security Policy,本质是 HTTP 响应头形式的白名单机制。
- 重点原理:XSS 攻击根源在于"浏览器无限信任服务器返回内容";CSP 通过白名单打破这种无条件信任。
- 易错点:CSP 并非只管脚本,还覆盖图片、音视频、网页等多种资源类型。
- 易混淆:
Content-Security-Policy(阻止)与Content-Security-Policy-Report-Only(仅上报)两种模式的区别。 - 面试题:简述 CSP 的工作原理及其如何防御 XSS 攻击。
- 面试题:CSP 两种响应头的区别及企业场景下的选择。
五、 课后疑问/遗留问题
- CSP 具体配置指令(
script-src、default-src、nonce、hash、self、unsafe-inline、unsafe-eval等)如何使用?——下一讲详解。 - 如何在 Nginx 等 Web 服务器中实际下发 CSP 响应头?
- 报告路径(
report-uri)接收的违规日志格式与后续处理流程是怎样的?