内容安全策略(Content Security Policy ,简称CSP)
内容安全策略(CSP)是一个额外的安全层,用于检测报告并削弱某些特定类型的攻击,包括跨站脚本(XSS)和数据注入攻击等。该安全策略通过设置HTTP响应标头中的Content-Security-Policy
字段,告诉浏览器哪些来源是受信任的,哪些操作是允许的,从而减少跨站脚本(XSS)攻击的风险。
Content-Security-Policy响应标头
Content-Security-Policy
(CSP)响应标头用于指定浏览器应该如何处理页面中的内容和资源,告诉浏览器哪些来源是受信任的,哪些操作是允许的,以此增强Web应用程序的安全性,减少或防止跨站脚本攻击(XSS)和其他类型的注入攻击。
参数
- font-src < source > < source >…
可选
用于定义通过 @font-face 加载的字体文件的来源
- img-src < source > < source >…
可选
用于定义图像的来源。
- media-src < source > < source >…
可选
用于定义< audio>、< video> 或 < track> 标签加载的媒体文件的源地址。
- object-src < source > < source >…
可选
用于定义< object> 或 < embed>标签加载资源的源地址。
- style-src < source > < source >…
可选
用于定义CSS样式表的来源。
- script-src < source > < source >…
可选
用于定义JavaScript代码的来源。
- connect-src < source > < source >…
可选
用于定义网络连接的来源,包括AJAX请求和WebSocket。
- manifest-src < source > < source >…
可选
用于定义manifest 文件的来源
- frame-src < source > < source >…
可选
用于定义< frame> 和 < iframe>加载的内嵌内容的源地址
- worker-src < source > < source >…
可选
用于定义Worker、SharedWorke 或 ServiceWorker脚本源。
- child-src < source > < source >…
可选
用于定义 Web Workers 和其他内嵌浏览器内容(例如用< frame> 和 < iframe>加载到页面的内容)的源地址。
- prefetch-src < source > < source >…
可选
用于定义预加载或预渲染的源地址。
- webrtc-src < source > < source >…
可选
实验中
用于定义WebRTC连接的源地址。
- default-src < source > < source >…
可选
用于定义默认内容的源地址,默认内容指未明确指定其来源的内容
- base-uri < source > < source >…
可选
用于定义 DOM 中 < base> 元素可以使用的 URL。
- sandbox < value> < value>…
可选
用于定义 iframe 中的行为和权限,与< ifame>元素中sandbox属性一致
- form-action< source > < source >…
可选
用于定义当前页面中表单的提交地址。
- frame-ancestors < source > < source >…
可选
用于定义哪些网页可以使用 iframe、frame、object、embed 等元素嵌套显示当前页面
- block-all-mixed-content
可选
指定该参数表明当使用 HTTPS 加载页面时阻止使用 HTTP 加载任何资源。
- upgrade-insecure-requests
可选
指定该参数表明把当前网页中所有不安全的URL(HTTP的URL)通过HTTPS访问
< source >取值
上述参数中< srouce >取值如下:
- < host-source > :以域名或者 IP 地址表示的主机名,外加可选的 URL 协议名以及端口号。站点地址中可能会包含一个可选的前置通配符(星号 ’ * ‘),同时也可以将通配符(也是’*')应用于端口号,表示在这个源中可以使用任意合法的端口号。
- < scheme-source > :表示URL协议名要相同,例如:
https:
、data:
、mediastream:
、blob:
、filesystem:
(冒号是必须的) - ‘self’ :表示同源,包括协议名和端口号都要相同(单引号是必须的)
- ‘unsafe-inline’ :允许使用内联资源,例如内联< script >元素、javascript:URL、内联事件处理程序和内联< style >元素(单引号是必须的)
- ‘unsafe-eval’ :允许使用
eval()
和其他不安全的方法从字符串创建代码(单引号是必须的) - ‘wasm-unsafe-eval’ :允许加载和执行 WebAssembly 模块,并且无需允许
'unsafe-eval'
(单引号是必须的) - ‘unsafe-hashes’ :允许启用特定的内联事件处理程序(例如
onclick
、onload
、onmouseover
等)。如果您只是不允许内联< script >元素或javascript:URL,那么这是比使用unsafe-inline
表达式更安全的方法(单引号是必须的) - ‘none’ :不允许任何内容(单引号是必须的)
- ‘nonce-< base64-value >’ :使用这个指令,你可以为每个内联脚本分配一个唯一的 nonce 值,并在 CSP 头部中指定这些 nonce 值,只有具有正确 nonce 值的内联脚本才会被执行(单引号是必须的)
- ‘< hash-algorithm >-< base64-value >’ :该指令为每个内联脚本生成哈希值,并在 CSP 头部中列出这些哈希值,只有与 CSP 头部中列出的哈希值匹配的内联脚本才会被执行(单引号是必须的)
- ‘strict-dynamic’ :它告诉浏览器在内联脚本执行时,只允许加载和执行来自同一源(同源)的外部脚本(单引号是必须的)
- ‘report-sample’ :要求在违规报告中包含违规代码示例(单引号是必须的)
示例
// 禁用不安全的内联/动态执行,只允许通过 https 加载这些资源(如图片、字体、脚本等)
Content-Security-Policy: default-src https:
<meta http-equiv="Content-Security-Policy" content="default-src https:">
// 资源只从 https 加载,允许使用`eval()`,允许使用内联资源,并且禁止插件
Content-Security-Policy: default-src https: 'unsafe-eval' 'unsafe-inline'; object-src 'none'
<meta http-equiv="Content-Security-Policy" content="default-src https: 'unsafe-eval' 'unsafe-inline'; object-src 'none'">
违规报告
支持 CSP 的浏览器将始终对于每个企图违反你所建立的策略都发送违规报告,如果策略里包含一个有效的report-uri
参数
启用报告
为启用发送违规报告,你需要指定report-to
参数,并提供至少一个 URI 地址去递交报告:
Content-Security-Policy: default-src 'self'; report-uri
http://reportcollector.example.com/collector.cgi
违规报告的内容
违规报告将 JSON 对象发送给report-to
参数指定的地址,它包含了以下数据:
- blocked-uri :被 CSP 阻止的资源 URI。如果被阻止的 URI 来自不同的源而非
document-uri
,那么被阻止的资源 URI 会被删减,仅保留协议、主机和端口号。 - disposition :根据
Content-Security-Policy-Report-Only
和Content-Security-Policy
标头使用情况的不同,值为"enforce"
或"report"
。 - document-uri :发生违规的文档的 URI。
- effective-directive :导致违规行为发生的指令。一些浏览器可能提供不同的值,例如 Chrome 提供
style-src-elem
或style-src-attr
,即使实际执行的指令是style-src
。 - original-policy :由
Content-Security-Policy
HTTP 标头指定的原始策略值。 - referrer
已删除
:违规发生处的文档引用(地址)。 - script-sample :导致该违规的内联代码、事件处理器或样式的前 40 个字符。只适用于
script-src*
或style-src*
包含'report-sample'
的情况。 - status-code :全局对象被实例化的资源的 HTTP 状态代码。
- violated-directive
已删除
:导致违反策略的指令。violated-directive
是effective-directive
字段的历史名称,并包含相同的值。
// 样式
{
"csp-report": {
"blocked-uri": "http://example.com/css/style.css",
"disposition": "report",
"document-uri": "http://example.com/signup.html",
"effective-directive": "style-src-elem",
"original-policy": "default-src 'none'; style-src cdn.example.com; report-to /\_/csp-reports",
"referrer": "",
"status-code": 200,
"violated-directive": "style-src-elem"
}
}
本人从事网路安全工作12年,曾在2个大厂工作过,安全服务、售后服务、售前、攻防比赛、安全讲师、销售经理等职位都做过,对这个行业了解比较全面。
最近遍览了各种网络安全类的文章,内容参差不齐,其中不伐有大佬倾力教学,也有各种不良机构浑水摸鱼,在收到几条私信,发现大家对一套完整的系统的网络安全从学习路线到学习资料,甚至是工具有着不小的需求。
最后,我将这部分内容融会贯通成了一套282G的网络安全资料包,所有类目条理清晰,知识点层层递进,需要的小伙伴可以点击下方小卡片领取哦!下面就开始进入正题,如何从一个萌新一步一步进入网络安全行业。
![](https://img-blog.csdnimg.cn/img_convert/311903982dea1d8a5d2c98fc271b5b41.jpeg)
### 学习路线图
其中最为瞩目也是最为基础的就是网络安全学习路线图,这里我给大家分享一份打磨了3个月,已经更新到4.0版本的网络安全学习路线图。
相比起繁琐的文字,还是生动的视频教程更加适合零基础的同学们学习,这里也是整理了一份与上述学习路线一一对应的网络安全视频教程。
![](https://img-blog.csdnimg.cn/img_convert/1ddfaf7dc5879b1120e31fafa1ad4dc7.jpeg)
#### 网络安全工具箱
当然,当你入门之后,仅仅是视频教程已经不能满足你的需求了,你肯定需要学习各种工具的使用以及大量的实战项目,这里也分享一份**我自己整理的网络安全入门工具以及使用教程和实战。**
![](https://img-blog.csdnimg.cn/img_convert/bcd1787ce996787388468bb227d8f959.jpeg)
#### 项目实战
最后就是项目实战,这里带来的是**SRC资料&HW资料**,毕竟实战是检验真理的唯一标准嘛~
![](https://img-blog.csdnimg.cn/img_convert/35fc46df24091ce3c9a5032a9919b755.jpeg)
#### 面试题
归根结底,我们的最终目的都是为了就业,所以这份结合了多位朋友的亲身经验打磨的面试题合集你绝对不能错过!
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化资料的朋友,可以点击这里获取](https://bbs.csdn.net/topics/618540462)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**