HTTP安全响应头--CSP(Content-Security-Policy)

一、CPS简介

Content-Security-Policy(CSP,内容安全策略)是一种由浏览器实施的安全机制,用于防止跨站脚本攻击(XSS)数据注入攻击点击劫持等常见 Web 安全威胁。

它通过白名单机制控制网页可以加载和执行哪些资源,从而有效减少恶意代码的执行机会。

二、核心作用

1、防止 XSS 攻击

禁止内联脚本执行,限制脚本只能从可信域名加载,即使攻击者注入恶意脚本,也无法执行。

2、控制资源加载来源

可限制图片、样式、字体、iframe、Ajax 请求等资源的来源,防止加载恶意内容。

3、防止数据泄露和点击劫持

通过限制表单提交目标、iframe 嵌入来源等方式,增强页面行为的安全性。

三、CSP 的设置方式

1、通过 HTTP 响应头设置(推荐)

示例:

Content-Security-Policy: script-src 'self'; object-src 'none'; img-src * data:;

含义:

  • 只允许加载当前域名的脚本;

  • 禁止加载任何 <object> 标签资源;

  • 图片可从任意来源加载,包括 data URI。

2、通过 HTML <meta> 标签设置

示例:

<meta http-equiv="Content-Security-Policy" content="script-src 'self'; style-src cdn.example.org;">

四、配置说明

1、常用指令(Directive)说明

指令功能
default-src默认资源加载策略(其他未指定指令的 fallback)
script-src控制 JavaScript 的来源
style-src控制 CSS 的来源
img-src控制图片的来源
connect-src控制 Ajax、WebSocket 等连接的目标
frame-src控制 iframe 的来源
form-action限制表单提交的目标地址
report-uri / report-to设置违规报告接收地址,用于安全监控

2、指令值(Source)说明

含义
'self'只允许同源资源
'none'禁止任何资源
'unsafe-inline'允许内联脚本/样式(⚠️降低安全性)
'unsafe-eval'允许使用 eval() 等动态执行代码(⚠️高风险)
https://example.com允许指定域名
nonce-<随机值>仅允许带有匹配 nonce 属性的脚本
sha256-<哈希值>仅允许哈希匹配的内联脚本

五、注意事项

1、生产前必做,仅报告模式

先在 Content-Security-Policy-Report-Only 头里跑 1-3 天,只记录不阻断:

nginx配置如下:

add_header Content-Security-Policy-Report-Only"default-src 'self'; script-src 'self' https://static.xxx.com; report-uri /csp-report" always;

观察 /csp-report 接收到的 JSON 违规日志,确认无合法资源被误杀后,再改成正式的 Content-Security-Policy 头 。

2、script-src 没有nonce/hash 不能使用 'unsafe-inline'

否则会导致所有内联 <script>alert(1)</script> 和 DOM 级 element.onclick = ... 放行。

攻击示例:

#请求
https://victim.com/search?q=
<script>alert(document.cookie)</script>
#返回结果
搜索关键词:<script>alert(document.cookie)</script>

错误配置示例:

add_header Content-Security-Policy "default-src 'self';script-src  'self'  data:;

 3、script-src 不能允许 data

否则会导致 data:text/javascript,alert(1) 这种 Base64 内嵌脚本会被执行。
攻击者只需注入 <script src="data:text/javascript,..."> 即可完成 XSS,完全绕过域名白名单。

错误配置示例:

add_header Content-Security-Policy "default-src 'self';script-src  'self' 'unsafe-inline';

六、服务器配置示例

1、NGINX配置示例

在 server {} 块里加一行:

server {listen 80;server_name example.com;# 全部响应都附加 CSPadd_header Content-Security-Policy "default-src 'self';script-src  'self' https://cdn.jsdelivr.net;style-src   'self' https://fonts.googleapis.com;img-src     'self' data: https:;font-src    'self' https://fonts.gstatic.com;object-src  'none';frame-ancestors 'self';upgrade-insecure-requests;" always;location / {proxy_pass http://127.0.0.1:8080;# 其他代理头省略}
}

重启 Nginx 后,所有 HTML 响应都会带上该头字段 。

2、Tomcat配置示例

修改 conf/web.xml,追加全局过滤器:

<filter><filter-name>HttpHeaderSecurityFilter</filter-name><filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class><init-param><param-name>content-security-policy</param-name><param-value>default-src 'self';script-src  'self' 'unsafe-inline';style-src   'self' 'unsafe-inline';img-src     'self' data:;object-src  'none';frame-ancestors 'self';</param-value></init-param>
</filter><filter-mapping><filter-name>HttpHeaderSecurityFilter</filter-name><url-pattern>/*</url-pattern>
</filter-mapping>

重启 Tomcat 后,所有响应自动携带 CSP 头

3、Spring Boot 示例

public class SecurityConfig {@BeanSecurityFilterChain filterChain(HttpSecurity http) throws Exception {http.headers(headers -> headers.contentSecurityPolicy(csp -> csp.policyDirectives("default-src 'self'; " +"script-src  'self' https://cdn.jsdelivr.net; " +"style-src   'self' https://fonts.googleapis.com; " +"img-src     'self' data: https:; " +"font-src    'self' https://fonts.gstatic.com; " +"object-src  'none'; " +"frame-ancestors 'self'; " +"upgrade-insecure-requests;")));return http.build();}
}

Spring Boot 3.x 可用,启动后观察响应头已含 Content-Security-Policy

相关新闻

(6) tauri之前端框架性能对比

(6) tauri之前端框架性能对比

这里使用tauri测试在同等数据压力下&#xff0c;react和vue的性能表现。以上是10w条数据的渲染测试&#xff0c;加载耗时在35~40ms之间&#xff0c;react和vue的性能表现都很好&#xff0c;下面是echart图表缩放&#xff0c;平移操作reactvue性能接近&#xff0c;处理效果上rea…

2026/7/17 16:43:23 阅读更多 →
java 数据库大数据量优化方法

java 数据库大数据量优化方法

在处理Java应用程序中的大数据量数据库时&#xff0c;优化性能和响应时间是非常重要的。下面是一些关键的优化方法&#xff0c;可以帮助你提高数据库的性能和可扩展性&#xff1a;1. 数据库设计和索引优化索引创建适当的索引&#xff1a;确保你的查询能够快速执行&#xff0c;通…

2026/7/16 9:51:41 阅读更多 →
GitLab-如何基于现有项目仓库,复制出新的项目仓库

GitLab-如何基于现有项目仓库,复制出新的项目仓库

GitLab-如何基于现有项目仓库&#xff0c;复制出新的项目仓库 点击

2026/7/18 10:23:36 阅读更多 →
Windows 10 PL2303驱动终极解决方案:让停产芯片在现代系统重获新生

Windows 10 PL2303驱动终极解决方案:让停产芯片在现代系统重获新生

Windows 10 PL2303驱动终极解决方案&#xff1a;让停产芯片在现代系统重获新生 【免费下载链接】pl2303-win10 Windows 10 driver for end-of-life PL-2303 chipsets. 项目地址: https://gitcode.com/gh_mirrors/pl/pl2303-win10 在Windows 10系统中连接老旧串口设备时&…

2026/7/19 19:50:44 阅读更多 →
机器学习模型上线后如何保障系统韧性与业务可用性

机器学习模型上线后如何保障系统韧性与业务可用性

1. 为什么“模型上线”不是终点&#xff0c;而是系统性风险的起点&#xff1f; 你有没有经历过这样的场景&#xff1a;模型在Jupyter Notebook里跑得飞起&#xff0c;AUC 0.92&#xff0c;F1 0.87&#xff0c;业务方拍板签字&#xff0c;庆功会都快安排上了——结果上线第三天&…

2026/7/19 19:50:44 阅读更多 →
044-reminderAgent代理提醒

044-reminderAgent代理提醒

044 — reminderAgent 代理提醒&#xff1a;定时记账通知的实现方案 简介 记账应用的核心挑战之一是培养用户的持续记账习惯。MoneyTrack 通过 reminderAgent 代理提醒能力&#xff0c;实现了每日定时记账通知——用户在每天设定的时间收到系统级提醒&#xff0c;点击提醒后直…

2026/7/19 19:50:43 阅读更多 →
043-Share Kit系统分享面板

043-Share Kit系统分享面板

043 — Share Kit 系统分享面板&#xff1a;一键分享月度账单报告 简介 社交分享是现代应用不可或缺的功能&#xff0c;它帮助产品通过用户口碑获得自然增长。MoneyTrack 通过 Share Kit 调用系统级分享面板&#xff0c;支持将月度账单报告以文本或图片的形式一键分享到微信、…

2026/7/19 19:50:43 阅读更多 →
系统集成项目管理工程师教程(第3版)笔记——第1章:信息化发展

系统集成项目管理工程师教程(第3版)笔记——第1章:信息化发展

第1章&#xff1a;信息化发展 1.1 信息与信息化 1.1.1 信息基础 1. 信息的定义 信息&#xff1a;用来消除不确定性的东西。比如天气预报告诉你明天会下雨&#xff0c;你就消除了“明天穿什么”的不确定性。香农提出信息论&#xff0c;用“比特”作为信息量的单位。熵&#xff1…

2026/7/19 19:50:43 阅读更多 →
2026 蜀山区回收行业整治,易奢福成合肥合规黄金回收示范门店 - 奢侈品回收实体店

2026 蜀山区回收行业整治,易奢福成合肥合规黄金回收示范门店 - 奢侈品回收实体店

前言:2026 合肥蜀山区回收整治浪潮,合规门店成市民首选 2026 年合肥市市场监管局联合公安、商务部门全面启动蜀山区黄金、奢侈品回收行业专项整治行动,依据《黄金以旧换新经营服务规范》团体标准、合肥市贵金属回收…

2026/7/19 19:49:13 阅读更多 →
鸿蒙 ArkTS 实战:Emoji Idiom Guess 从表情成语猜谜到交互闭环完整解析

鸿蒙 ArkTS 实战:Emoji Idiom Guess 从表情成语猜谜到交互闭环完整解析

鸿蒙 ArkTS 实战&#xff1a;Emoji Idiom Guess 从表情成语猜谜到交互闭环完整解析 前言 Emoji Idiom Guess 是一个基于鸿蒙 ArkTS 编写的单页互动应用&#xff0c;核心围绕 表情线索、答案输入、首字母提示和收藏关卡 展开。项目没有依赖复杂服务端&#xff0c;也没有把逻辑…

2026/7/19 0:00:03 阅读更多 →
Unity与Python本地通信:基于Flask的跨语言数据交换实战

Unity与Python本地通信:基于Flask的跨语言数据交换实战

1. 项目概述&#xff1a;为什么我们需要一个本地通信服务器&#xff1f;在游戏开发、数字孪生、仿真训练等众多领域&#xff0c;Unity作为强大的实时3D内容创作平台&#xff0c;其核心逻辑通常由C#驱动。然而&#xff0c;当我们需要进行复杂的数据分析、机器学习推理、科学计算…

2026/7/19 0:00:04 阅读更多 →
科研课题设计全流程:从选题到成果落地的实战指南

科研课题设计全流程:从选题到成果落地的实战指南

1. 课题设计全流程解析&#xff1a;从选题到成果落地的实战指南课题设计是科研工作者、高校师生以及企业研发人员日常工作中的核心环节。一个优秀的课题设计不仅决定了研究的方向和质量&#xff0c;更直接影响最终成果的学术价值和应用前景。作为在科研一线摸爬滚打多年的从业者…

2026/7/19 0:00:04 阅读更多 →
鸿蒙 ArkTS 实战:Emoji Idiom Guess 从表情成语猜谜到交互闭环完整解析

鸿蒙 ArkTS 实战:Emoji Idiom Guess 从表情成语猜谜到交互闭环完整解析

鸿蒙 ArkTS 实战&#xff1a;Emoji Idiom Guess 从表情成语猜谜到交互闭环完整解析 前言 Emoji Idiom Guess 是一个基于鸿蒙 ArkTS 编写的单页互动应用&#xff0c;核心围绕 表情线索、答案输入、首字母提示和收藏关卡 展开。项目没有依赖复杂服务端&#xff0c;也没有把逻辑…

2026/7/19 0:00:03 阅读更多 →
Unity与Python本地通信:基于Flask的跨语言数据交换实战

Unity与Python本地通信:基于Flask的跨语言数据交换实战

1. 项目概述&#xff1a;为什么我们需要一个本地通信服务器&#xff1f;在游戏开发、数字孪生、仿真训练等众多领域&#xff0c;Unity作为强大的实时3D内容创作平台&#xff0c;其核心逻辑通常由C#驱动。然而&#xff0c;当我们需要进行复杂的数据分析、机器学习推理、科学计算…

2026/7/19 0:00:04 阅读更多 →
科研课题设计全流程:从选题到成果落地的实战指南

科研课题设计全流程:从选题到成果落地的实战指南

1. 课题设计全流程解析&#xff1a;从选题到成果落地的实战指南课题设计是科研工作者、高校师生以及企业研发人员日常工作中的核心环节。一个优秀的课题设计不仅决定了研究的方向和质量&#xff0c;更直接影响最终成果的学术价值和应用前景。作为在科研一线摸爬滚打多年的从业者…

2026/7/19 0:00:04 阅读更多 →
ai agent框架spring ai/alibaba 源码原理分析(六) agent和组件

ai agent框架spring ai/alibaba 源码原理分析(六) agent和组件

简介 saa是java的ai agent框架&#xff0c;本系列将深入剖析 Spring AI Alibaba 的源码实现与核心原理&#xff0c;不仅可以指导agent的开发&#xff0c;更可以改造框架&#xff0c;增加新特性 系列内容&#xff1a; 系列(一) 架构 完成 系列(三) 调用 I 工具 完成 II M…

2026/7/19 0:01:20 阅读更多 →
终极指南:如何用Steam-auto-crack实现Steam游戏自动破解

终极指南:如何用Steam-auto-crack实现Steam游戏自动破解

终极指南&#xff1a;如何用Steam-auto-crack实现Steam游戏自动破解 【免费下载链接】Steam-auto-crack Steam Game Automatic Cracker 项目地址: https://gitcode.com/gh_mirrors/st/Steam-auto-crack Steam-auto-crack是一款功能强大的Steam游戏自动破解工具&#xff…

2026/7/19 9:10:31 阅读更多 →
移动端游戏功耗测试实战:电流、功率、亮度和场景对比

移动端游戏功耗测试实战:电流、功率、亮度和场景对比

移动端游戏功耗测试:先控制变量,再比较优化是否真的省电 摘要:功耗测试最容易犯的错误,是拿两次不同温度、不同亮度、不同场景的平均功率直接比较。本文给出一套可复现的游戏功耗测试方法,覆盖引擎特性验证、版本回归和黑盒体验测试,并说明如何把功耗与帧率、温控、CPU/G…

2026/7/19 19:29:48 阅读更多 →