What is CSP (内容安全策略)?
内容安全策略(CSP)
内容安全策略(Content Security Policy, CSP) 是一个额外的安全层,用于帮助检测和缓解某些类型的攻击,包括跨站脚本(XSS)和数据注入攻击。
你可以把它看作是一个白名单制度。你作为网站的管理员,通过一个特殊的 HTTP 头(Content-Security-Policy)告诉浏览器:“这个网站只被允许执行来自以下来源的脚本、加载以下来源的图片、连接以下来源的服务器……”,浏览器就会严格遵守这个规定,拒绝任何不在白名单上的内容。

它是如何保证安全的?
传统的 XSS 防御(如我们上面代码中的转义和过滤)是服务端的,思路是“我把用户输入里的恶意代码清理掉,再输出给浏览器”。但这种方法可能存在漏洞,比如过滤规则被绕过。
CSP 的防御思路是客户端(浏览器端) 的,它从根本上改变了浏览器的行为:
阻断内联脚本和样式: 大多数 XSS 攻击都依赖于将恶意代码(如 < script >alert('xss') </script > 或 < img onerror="恶意代码" >) 直接注入到 HTML 页面中。CSP 默认禁止执行所有内联 JavaScript(包括 < script > 块和 HTML 事件处理程序如 onclick)和样式,除非你显式地允许它们(使用 'unsafe-inline' 或 nonce),这极大地增加了攻击难度。
限制资源加载的来源: 即使攻击者成功注入了标签,比如 < script src="https://evil.com/hack.js" >,浏览器在收到 CSP 指令后,会检查 src 中的域名 evil.com 是否在脚本加载的白名单中。如果不在,浏览器根本就不会去请求和加载这个恶意脚本。
禁止使用 eval() 等危险函数: CSP 默认会禁止使用像 eval()、setTimeout(string)、new Function(string) 这类可以执行字符串形式代码的危险函数,因为它们经常被攻击者利用。
如何实施 CSP?
通常通过在 Web 服务器的 HTTP 响应头中添加 Content-Security-Policy 字段来实现。字段里需要配置通过一系列指令来定义策略,具体指令自己需要再查询吧。
示例 1:一个严格且推荐的策略
Content-Security-Policy:
default-src 'self';
script-src 'self' https://cdn.jsdelivr.net; # 只允许同源和指定的 CDN 的脚本
style-src 'self' 'unsafe-inline'; # 允许内联样式(常见于框架)
img-src 'self' data:; # 允许同源和 data:URI 的图片
object-src 'none'; # 完全禁止插件
report-uri /api/csp-report; # 发生违规时向这个地址报告
安全测试者如何绕过 CSP?
虽然 CSP 很强大,但配置不当的 CSP 仍然可能被绕过。安全测试者会检查:
过于宽松的策略: 如果策略中包含 'unsafe-inline' 或 'unsafe-eval',或者白名单 (*),那么 CSP 提供的保护就大打折扣。
unsafe-inline——允许旧代码或框架中的内联脚本/样式。unsafe-eval——允许eval函数。允许 data: URI: 如果 script-src 包含了 data:,攻击者可以注入 <script src="data:text/javascript,恶意代码" > </script >。
允许通配符 *: 过于宽泛的来源。
JSONP 端点滥用: 如果白名单中包含一个允许 JSONP 的第三方域名(如 Google Analytics 等旧 API),攻击者可能利用该域点的 JSONP 端点来执行代码,因为 JSONP 返回的是可执行代码。
AngularJS 等框架的绕过: 在特定版本的 AngularJS 中,即使禁止了 unsafe-eval,也有其他方式可以执行代码。
CSP 注入: 如果页面本身允许用户输入某些内容并反射到 CSP 头中(极其罕见但确实存在),攻击者可能会注入一些指令来修改策略。
只能辅助,不可做主力
CSP无法替代输入过滤;
若开发者完全依赖CSP而忽略输入验证(如未转义用户输入),攻击者仍可能通过DOM型XSS或绕过CSP的其他方式(如滥用JSONP接口)发起攻击。CSP只是作为纵深防御层;
What is CSP (内容安全策略)?的更多相关文章
- aspnet core2中使用csp内容安全策略
aspnet core2中使用csp内容安全策略 问题:aspnet core2如何使用csp防止xss的攻击 方法: public void ConfigureServices( IServiceC ...
- 【XSS】再谈CSP内容安全策略
再谈CSP内容安全策略 之前每次都是想的很浅,或者只是个理论派,事实证明就是得动手实践 参考 CSP的用法 官方文档 通过设置属性来告诉浏览器允许加载的资源数据来源.可通过Response响应头来设置 ...
- Content Security Policy (CSP)内容安全策略
CSP简介 Content Security Policy(CSP),内容(网页)安全策略,为了缓解潜在的跨站脚本问题(XSS攻击),浏览器的扩展程序系统引入了内容安全策略(CSP)这个概念. CSP ...
- CSP内容安全策略总结及如何抵御 XSS 攻击
跨域脚本攻击 XSS 是最常见.危害最大的网页安全漏洞.为了防止它们,要采取很多编程措施,非常麻烦.很多人提出,能不能根本上解决问题,浏览器自动禁止外部注入恶意脚本?这就是"网页安全政策&q ...
- 网页入侵最后一道防线:CSP内容安全策略
首先,什么是最后一道防线?网页入侵都有一个过程,简单来说,就是1.代码注入,2.代码执行. 对于黑客来说,代码注入后并不代表就万事大吉了,因为此时代码只是安静地躺在受害者的服务器里,什么坏事都没干呢! ...
- CSP内容安全策略
在浏览网页的过程中,尤其是移动端的网页,经常看到有很多无关的广告,其实大部分广告都是所在的网络劫持了网站响应的内容,并在其中植入了广告代码.为了防止这种情况发生,我们可以使用CSP来快速的阻止这种广告 ...
- Content Security Policy (CSP)内容安全策略总结
跨域脚本攻击 XSS 是最常见.危害最大的网页安全漏洞. 为了防止它们,要采取很多编程措施,非常麻烦.很多人提出,能不能根本上解决问题,浏览器自动禁止外部注入恶意脚本?这就是"网页安全政策& ...
- 安全 - 内容安全策略(CSP)(未完)
威胁 跨站脚本攻击(Cross-site scripting) 跨站脚本攻击Cross-site scripting (XSS)是一种安全漏洞,攻击者可以利用这种漏洞在网站上注入恶意的客户端代码. 攻 ...
- 内容安全策略(CSP)详解
1.背景 1.1.同源策略 网站的安全模式源于"同源策略",web浏览器允许第一个web页面中的脚本访问页面中的数据,但前提是两个web页面具有相同的源.此策略防止一个页面的恶意脚 ...
- Web 安全之内容安全策略 (CSP)
内容安全策略 (CSP, Content Security Policy) 是一个附加的安全层,用于帮助检测和缓解某些类型的攻击,包括跨站脚本攻击 (XSS) 和数据注入等攻击. 这些攻击可用于实现从 ...
随机推荐
- TinyVue 智能组件库:基于 MCP 协议,实现 AI 代替人操作 Web 组件
你好,我是 Kagol,个人公众号:前端开源星球. 2025年6月21日,我在华为开发者大会2025(HDC2025)开源论坛做了一场主题分享,给开发者们介绍我们 OpenTiny 团队基于 MCP ...
- 【安装系统】win8装win7遇到的一些坑
估计不少人就觉得重装系统很容易,本身win7再装win7那基本都是无脑一键操作. 下面说的是一次win8装win7的坑~ 案例材料: 戴尔灵越14-5439,内存4G,硬盘500G. 原系统:win8 ...
- Kafka入门实战教程(9):深入了解Offset
1 什么是offset? Offset,消息位移,它表示分区中每条消息的位置信息,是一个单调递增且不变的值.换句话说,offset可以用来唯一的标识分区中每一条记录. 消费者消费完一条消息记录之后,需 ...
- 插件报错:SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder“.解决方案
今天在用Maven搞一个工程,安装要求我添加了所有需要的依赖,可是一运行测试程序,就跳出这样一个大大的错误: SLF4J: Failed to load class "org.slf4j.i ...
- 🛡️ Nginx 配置 HTTPS 完整指南
一.准备工作 域名已备案(国内服务器) SSL/TLS 证书和私钥文件 通常包括: your_domain.crt:服务器证书 your_domain.key:私钥文件 chain.crt 或 ca. ...
- RestFul 标准Api
RestFul Api 规范(URL,HTTP,版本,状态码,返回值,请求条件等规范) get (select) :从服务器取出资源(一项或多项) post (Create) :在服务器新建一个资源 ...
- 精控Spring AI日志
还在为 Spring AI 默认的日志抓狂吗?想看日志却看不到,一开 DEBUG 就刷屏... 别慌! 今天 NEO 带你解锁一个神级操作:自定义 Advisor,让你轻松掌控 AI 调用的每一个细节 ...
- 如何在FastAPI中玩转STOMP协议升级,让你的消息传递更高效?
扫描二维码 关注或者微信搜一搜:编程智域 前端至全栈交流与成长 发现1000+提升效率与开发的AI工具和实用程序:https://tools.cmdragon.cn/ 1. STOMP协议基础 STO ...
- 开发工具系列003-OSX系统基础命令
本文简单记录工作中常用的命令行(持续更新),因为我用的是`Mac OSX`系统,因此部分命令在`Windows系统`中将失效(或需调整),此外需注意Windows的文件系统路径斜杠和`UNIX`是反的 ...
- vscode 回退
简介 配置 Go Back / Go Forward 个人必须配置这两个否则会十分不爽.