手机版 | 登录 | 注册 | 留言 | 设首页 | 加收藏
联系客服
当前位置: 网站首页 > 程序技巧 > 文章 当前位置: 程序技巧 > 文章

内容安全策略(CSP)详解

时间:2023-03-05    点击: 次    来源:网络    添加者:佚名 - 小 + 大

在上一篇博客我们主要总结了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选项配合使用
1
2
3
4
四、CSP的使用

(1)、在HTTP Header上使用(首选)
"Content-Security-Policy":策略
"Content-Security-Policy-Only":策略
1
2
3
(2)、在HTML上使用
<meta http-equiv="content-security-policy" content="策略">
<meta http-equiv="content-security-policy-report-only" content="策略">
1
2
3
Meta标签与HTTP头只是形式不同而已,但是表示的作用都是一致的,如果HTTP头与Meta定义同时存在,则优先采用HTTP中的定义
如果用户浏览器已经为当前文档执行了一个CSP的策略,则会跳过Meta标签的定义。如果Meta标签缺少content属性的时候也同样会跳过。
五、策略该怎么写

//限制所有的外部资源,只能从当前域中加载。
Content-Security-policy:default-src "self"
1
2
//default-src是csp指令,多个指令之间使用;来隔离,多个指令值之间使用空格来分离。
Content-Security-policy:default-src https://host1.com https://host2.com; frame-src "none"; object-src "none"
1
2
//错误写法,这样写第二个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
1
2
3
4
//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"  
  }  
}  
1
2
3
4
5
6
7
8
9
10
11
12
13
六、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()
————————————————
原文链接:https://blog.csdn.net/weixin_47450807/article/details/123224654
分享按钮

上一篇:asp常见漏洞

下一篇:apche服务器下无后缀文件配置浏览器访问自动下载

豫ICP备19032584号-1  |   QQ:80571569  |  地址:河南濮阳市  |  电话:13030322310  |  
Copyright © 2024 FE内容付费系统 版权所有,授权www.xingwp.cn使用 Powered by 66FE.COM