- 使用 Spring Initializr 创建 Spring Boot 应用程序
- 在Spring Boot中配置Cassandra
- 在 Spring Boot 上配置 Tomcat 连接池
- 将Camel消息路由到嵌入WildFly的Artemis上
在上一篇博客我们主要总结了XSS
攻击,本篇博客主要总结内容安全策略CSP
的相关内容。
一、定义
内容安全策略(CSP),是一种安全策略,其原理是当浏览器请求某一个网站时,告诉该浏览器申明文件可以执行,什么不可以执行。CSP
是专门解决XSS
攻击而生的神器。CSP
的引入会使得我们的引入扩展程序更加安全,并且可以由开发者指定可以加载扩展程序的类型,避免恶意的脚本在浏览器中执行,造成信息泄露问题。
二、CSP的意义CSP
是防XSS
的利器,可以把其理解为白名单,开发者通过设置CSP
的内容,来规定浏览器可以加载的资源,CSP 大大增强了网页的安全性。攻击者即使发现了漏洞,也没法注入脚本,除非还控制了一台列入了白名单的可信主机。
三、CSP的分类
(1)、Content-Security-Policy:
配置好并启用后,不符合CSP的外部资源就会被阻止加载。
(2)、Content-Security-Policy-Report-Only
表示不执行限制选项,只是记录违反限制的行为。它必须与resport-uri选项配合使用
四、CSP的使用
(1)、在HTTP Header上使用(首选)
"Content-Security-Policy":策略
"Content-Security-Policy-Only":策略
(2)、在HTML上使用
<meta http-equiv="content-security-policy" content="策略">
<meta http-equiv="content-security-policy-report-only" content="策略">
Meta标签与HTTP头只是形式不同而已,但是表示的作用都是一致的,如果HTTP头与Meta定义同时存在,则优先采用HTTP中的定义
如果用户浏览器已经为当前文档执行了一个CSP的策略,则会跳过Meta标签的定义。如果Meta标签缺少content属性的时候也同样会跳过
。
五、策略该怎么写
//限制所有的外部资源,只能从当前域中加载。
Content-Security-policy:default-src "self"
//default-src是csp指令,多个指令之间使用;来隔离,多个指令值之间使用空格来分离。
Content-Security-policy:default-src https://host1.com https://host2.com; frame-src "none"; object-src "none"
//错误写法,这样写第二个script-src指令将会被忽略
Content-Security-Policy: script-src https://host1.com; script-src https://host2.com
//正确写法
Content-Security-Policy: script-src https://host1.com https://host2.com
//report-uri指令表示浏览器发送JSON格式的拦截报告到某一个地址。
Content-Security-Policy: default-src "self"; report-uri /my_amazing_csp_report_parser;
//具体报告如下所示
{
"csp-report": {
"document-uri": "http://example.org/page.html",
"referrer": "http://evil.example.com/",
"blocked-uri": "http://evil.example.com/evil.js",
"violated-directive": "script-src 'self' https://apis.google.com",
"original-policy": "script-src 'self' https://apis.google.com; report-uri http://example.org/my_amazing_csp_report_parser"
}
}
六、CSP指令6.1、常用的CSP指令
指令 | 指令和指令值示例 | 指令说明 |
---|---|---|
default-src | “self” “cdn.guangzhul.com” | 默认加载策略 |
script-src | “self” “js.guangzhul.com” | 对javascript的加载策略 |
style-src | “self” “css.guangzhul.com” | 对样式的加载策略 |
img-src | “self” “img.guangzhul.com” | 对图片的加载策略 |
content-src | “self” | 对ajax,websocket请求的加载策略。不允许的情况下浏览器会模拟一个状态为400的相应 |
font-src | “font.cdn.guangzhul.com” | 针对webFont的加载策略 |
object-src | “self” | 指针或标签引入flash等插件的加载策略 |
media-src | media.cdn.guangzhul.com | 针对媒体引入的HTML多媒体的加载策略 |
frame-src | “self” | 针对frame的加载策略 |
report-uri | /report-uri | 告诉浏览器如果请求的资源不被策略允许时,往哪个地址提交日志信息。 特别的:如果想让浏览器只汇报日志,不阻止任何内容,可以改用 Content-Security-Policy-Report-Only 头 |
6.2、其他的CSP指令
指令 | 指令说明 |
---|---|
sandbox | 设置沙盒环境 |
child-src | 主要防御 frame,iframe |
form-action | 主要防御 form |
frame-ancestors | 主要防御 frame,iframe,object,embed,applet |
plugin-types | 主要防御 object,embed,applet |
6.3、CSP指令值
指令值 | 指令和指令值示例 | 指令值说明 |
---|---|---|
* | img-src * | 允许任何内容 |
“none” | img-src “none” | 不允许任何内容 |
“self” | img-src “self” | 允许来自相同的来源的内容(相同的协议,域名和端口) |
data: | img-src data: | 允许data协议(如base64编码的图片) |
www.guangzhul.com | img-src img.guangzhul.com | 允许加载指定域名下的资源 |
*.guangzhulcom | img-src: *.guangzhul.com | 允许加载guangzhul.com任何子域下面的资源 |
“unsafe-inline” | script-src “unsafe-inline” | 允许加载inline的资源 例如常见的 style 属性,onclick,inline js 和 inline css 等等 |
“unsafe-eval” | script-src “unsafe-eval” | 允许加载动态js代码,例如eval() |
本篇博客主要参考:CSP
当我读这本书 -- 人工智能(一种现代方法)时,我遇到了以下描述将 n 元约束搜索问题转换为二进制问题的方法的句子: Another way to convert an n-ary CSP to a
我的Web应用程序(JS部分)需要在加载之前由服务器配置。现在它是通过以下方式完成的: var configObj = { setting1: "blah", setting2: {val1: 1,
作为开发人员,我应该为windows提供什么智能卡登录功能?只有微型驱动程序 + 现有的基础智能卡 csp 工作吗或者,如果我开发了一个完整的 CSP,我可以让智能卡登录正常工作吗? 最佳答案 你应该
在一些 css 文件中嵌入一些 base64 字体,但 CSP 阻止了这些:类似于 url("data:font/woff;base64,d09GRk9UVE...); 当前 CSP =“base-u
CSP的理念:以通信的方式来共享内存 不要通过共享内存来通信,而要通过通信来实现内存共享。这就是 Go 的并发哲学,它依赖 CSP 模型,基于 channel 实现。Go 一开始就把 CSP 的思想融
在上一篇博客我们主要总结了XSS攻击,本篇博客主要总结内容安全策略CSP的相关内容。 一、定义 内容安全策略(CSP),是一种安全策略,其原理是当浏览器请求某一个网站时,告诉该浏览器申明文件可以执行,
我正在开发一个 Flask 应用程序,它使用 Flask-Talisman 来合并一个 CSP。我想在我的模板之一中创建一个内联脚本,而不是将“unsafe-inline”添加到 CSP 的“scri
我注意到 GitHub 和 Facebook 现在都在实现这项政策,这限制了第三方脚本在他们的体验/站点中运行。 有没有办法使用 检测文档是否针对 CSP 运行? JavaScript ? 我正在编写
我一直在努力寻找最好的管理访问权限的方法,并允许我们的技术人员访问我们的客户订阅和 Azure 资源,而不给予他们作为每个订阅的贡献者或类似权利的明确权利。 现在我遇到了权限身份管理功能( https
我正在学习内容安全策略。 假设我的网站 abc.com 有以下 csp: default-src 'self' 'unsafe-inline' 'unsafe-eval' xyz.com 这是否意味着
我一直在努力寻找最好的管理访问权限的方法,并允许我们的技术人员访问我们的客户订阅和 Azure 资源,而不给予他们作为每个订阅的贡献者或类似权利的明确权利。 现在我遇到了权限身份管理功能( https
我了解使用 CSP 的好处,但是发送这些 header 用于 HTML 文件以外的任何内容是否浪费?例如,我是否需要在图像上发送 CSP header ?对于 .js 文件? 最佳答案 Content
Closed. This question needs to be more focused。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过editing this post专注于一个问题
有许多用于 JavaScript 的图表绘制库,例如 Chart.js 或 Chartist.js。但是,我们无法找到任何适用于严格 CSP-Mode 的库。 .我们测试的所有库都使用 eval 或默
如何获取已连接智能卡的 CSP 提供商名称? 我无法访问注册表窗口,因此我找到了通过 win API 获取该信息的方法。 我已经看过有关 SCardGetCardTypeProviderName 的内
我正在编写一个使用智能卡进行 xml 签名的简单程序。 示例代码: var cspParams = new CspParameters(1, "Microsoft Base Smart Card Cr
我正在尝试编写自己的 CSP。我正在尝试通过实现一个 dll 文件来做到这一点,但我不确定我的方法是否正确。 我发现了这样的东西:加密服务提供商开发人员工具包 (CSPDK) 有 CSP API 的示
下册开学期末+CSP-J游记 Day -14 期末 Day -7 今天家长会,老师公布成绩 /fn/fn/fn。政治和历史考废了,然后其他都挺好。 语文 \(101\
当我从 TFS 服务器运行构建时,出现以下错误:无法导入以下 key 文件:C:\TfsData\Build_work\fa450055\EXChecker 2015\signingKey.pfx。
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 8 年前。 Improve
我是一名优秀的程序员,十分优秀!