csp php,CSP学习笔记(持续学习更新)
CSP——Content Security Policy
大佬光辉照耀我-学习链接
百度百科:CSP指的是内容安全策略,为了缓解很大一部分潜在的跨站脚本问题,浏览器的扩展程序系统引入了内容安全策略(CSP)的一般概念。这将引入一些相当严格的策略,会使扩展程序在默认情况下更加安全,开发者可以创建并强制应用一些规则,管理网站允许加载的内容。
Content Security Policy 最早在firefox 23中实现,当时使用的是 X-Content-Security-Policy,它使用了前置词的内容安全性策略,并以W3C CSP1.0规范作为标准。
按照我的理解,CSP就是高级白名单机制,并且限制了网站的很多访问行为。
CSP编写网站:https://www.cspisawesome.com/
CSP语法以及范例
header("Content-Security-Policy:
default-src 'none';
connect-src 'self';
frame-src 'self';
script-src xxxx/js/
'sha256-KcMxZjpVxhUhzZiwuZ82bc0vAhYbUJsxyCXODP5ulto='
'sha256-u++5+hMvnsKeoBWohJxxO3U9yHQHZU+2damUA6wnikQ=' ;
font-src xxxx/fonts/ fonts.gstatic.com;
style-src xxxx/css/ fonts.googleapis.com;
img-src 'self'
");
有那么一丢丢长....里面包括了各种各样的写法:
1、none和self,none代表什么都不匹配,self代表匹配同源的来源
2、https://xxx/js/匹配目录下所有文件,https://xxx/js/file.js匹配特殊文件
3、第三种是类似于https:,会匹配所有包含这个特殊的格式的来源。
4、也有可能是example.com这样的,会匹配所有这个host的来源,或者会有*.example.com,会匹配这个host的所有子域。
5、第五种是类似于nonce-qwertyu12345会匹配一个特殊的节点。
6、当然还有加密过的类似于sha256-abcd…同样会匹配页面中一个特殊的节点(每次修改这个值都会改变)。
感觉下面这个是一个比较详细的字段说明
serialized-source-list = ( source-expression *( RWS source-expression ) ) / "'none'"
source-expression = scheme-source / host-source / keyword-source
/ nonce-source / hash-source
; Schemes:
scheme-source = scheme ":"
; scheme is defined in section 3.1 of RFC 3986.
; Hosts: "example.com" / "*.example.com" / "https://*.example.com:12/path/to/file.js"
host-source = [ scheme-part "://" ] host-part [ port-part ] [ path-part ]
scheme-part = scheme
host-part = "*" / [ "*." ] 1*host-char *( "." 1*host-char )
host-char = ALPHA / DIGIT / "-"
port-part = ":" ( 1*DIGIT / "*" )
path-part = path
; path is defined in section 3.3 of RFC 3986.
; Keywords:
keyword-source = "'self'" / "'unsafe-inline'" / "'unsafe-eval'"
; Nonces: 'nonce-[nonce goes here]'
nonce-source = "'nonce-" base64-value "'"
base64-value = 1*( ALPHA / DIGIT / "+" / "/" / "-" / "_" )*2( "=" )
; Digests: 'sha256-[digest goes here]'
hash-source = "'" hash-algorithm "-" base64-value "'"
hash-algorithm = "sha256" / "sha384" / "sha512"
CSP属性
大佬的文章讲的很好很好,这里不转载赘述啦,总之就是不同属性的对应不同属性请求作用规则。
图片简单说明
不同的配置参数
Bypass CSP
xxxx-src *
这个规则里的*符号表示,允许除了内联函数以外所有的url式的请求,这基本上就随意开火了。
xxxx-src self
一般来说,self代表只接受符合同源策略的url,这样一来,大部分的xss和crsf都会失效,有个标签比较例外,虽然已经被加入的现在的csp草案中,但是的确还没有施行(这里的现在大概是16年,现在可不好说)。
这种请求在firefox上会被拦截(除非同源),其余的现在不好说
此外,也可以在当前域上传,如果有上传,直接加载就行了,完全么有限制。
攻击范例
不知道有多少人了解过cctf2016,其中有一道web题目IDS-Chicken
题目环境就符合我说的情况,CSP滴水不漏,几乎没办法用任何方式构造xss,但是内网存在上传点,上传文件会被重写为文件,link包含形成xss漏洞。
script-src 'unsafe-inline'
如果加上这个参数,就不会阻止内联脚本,但这被认为是不安全的。
对于这个属性有个特殊的配置叫unsafe-eval,他会允许下面几个函数
eval()
Function()
setTimeout() with an initial argument which is not callable.
setInterval() with an initial argument which is not callable.
我们先尝试构造payload
payload
可以明显的看到被拦了
拦截信息
但是我们尝试构造内联脚本
内联脚本
能看到成功执行
结果
由于同源策略,这个请求不能发往别的域下,但是实战环境中利用方式很多,就比如这个聊天版,可以通过发给别的用户的方式get cookie
var xmlhttp=new XMLHttpRequest();
xmlhttp.open("POST","submit.php",true);
xmlhttp.setRequestHeader(_Ctent-type_,_applicati/x-www-form-urlencoded_);
xmlhttp.send(_to=lorexxar&&message=_+document.cookie);
;
302 Bypass CSP
来源:https://lorexxar.cn/2016/10/31/csp-then2/
首先要意识到如果我们构造一个重定向,就可以bypass CSP的域限制
测试页面(test.php):
header("Content-Security-Policy: script-src http://127.0.0.1/ http://xss.cc/the_only_allow_dir/");
?>
csp header test
整个站都在/test/下,/test/js/下包含正常的js.
条件一:必须有可以重定向的页面
假设第一个域下的某个位置有个可以定义重定向的页面,比如
这里测试的时候写在了根目录下,不过是要是域内允许的任何为之都可以,这样的功能一般多出现在登陆页面
条件二:我们需要一个被允许的域
比如 http://127.0.0.1/ 里一般会有js目录被允许,然后可能存在upload域可以上传一个js。这里我们允许了http://xss.cc/the_only_allow_dir/这个域,然后在http://xss.cc/myjs/a.js里面写入js内容,比如 alert(2333)这种。
然后访问测试页面(test.php),就会重定向过去。
其它Bypass方式
CSP困境以及升级
csp php,CSP学习笔记(持续学习更新)相关推荐
- 机器学习学习笔记-持续学习(Continual Learning/ Life-long Learning)
任务: 将旧任务学习的知识应用到新的任务上,同时在旧任务上的表现不会出现太大的损失. 问题: (1)将旧任务的知识利用,从而更快适应新任务. (2)在学习新任务的同时在旧任务上的表现不会出现太大下降. ...
- 大前端学习笔记--持续随缘更新
前端知识&HTML常用标签 20200210 1.浏览器及内核介绍: chrome谷歌:特点--简洁.快速.安全内核--webkit,Blink费用--收费前缀-- -webkit- Fire ...
- 重拾CCNA,学习笔记持续更新ing......(4)
重拾CCNA,学习笔记持续更新ing......(4) 路由器作用功能的经典解说(笑)(非原创) 假设你的名字叫小不点,你住在一个大院子里,你的邻居有很多小伙伴,在门口传达室还有个看大门的李大爷,李大 ...
- Java开发面试高频考点学习笔记(每日更新)
Java开发面试高频考点学习笔记(每日更新) 1.深拷贝和浅拷贝 2.接口和抽象类的区别 3.java的内存是怎么分配的 4.java中的泛型是什么?类型擦除是什么? 5.Java中的反射是什么 6. ...
- ① ESP8266 开发学习笔记_By_GYC 【更新 ets_printf 函数 使ESP_IDF 能够支持浮点数打印】
① ESP8266 开发学习笔记_By_GYC [更新 ets_printf 函数 使ESP_IDF 能够支持浮点数打印] 在我们日常的开发过程中,经常使用到的一个功能就是串口打印功能.在ESP826 ...
- SilverLight学习笔记--进一步学习Isolated Storage独立存储一(理论篇)
在"silverlight如何在客户端读取文件"以及"silverlight如何在客户端写入文件"两篇文章中我们初步接触了Isolated Storage概念. ...
- Python3学习笔记之-学习基础(第三篇)
Python3学习笔记之-学习基础(第三篇) 文章目录 目录 Python3学习笔记之-学习基础(第三篇) 文章目录 一.循环 1.for循环 2.while循环 3.break,continue 二 ...
- 强化学习笔记-强化学习概述
强化学习笔记-强化学习概述 机器学习分类 强化学习与监督学习的异同点 强化学习基本原理 强化学习解决的是什么样的问题 强化学习分类 请分别解释随机性策略和确定性策略 回报.值函数.行为值函数三个指标的 ...
- Admin.NET管理系统(vue3等前后端分离)学习笔记--持续更新
我的学习笔记 - 9iAdmin.NET 欢迎学习交流 (一)前端笔记 1.1 关于.env的设置 1.2 关于路由模式问题 1.3 关于 vue.config.ts 1.4 关于 打包(pnpm r ...
最新文章
- 下载r包IlluminaHumanMethylation450kanno.ilmn12.hg19
- 老男人面试第四家第五家-初创公司和b轮公司
- python 网络相关依赖库 dpkt、scapy、pcap 安装
- UVA11464偶数矩阵
- Python之sklearn:LabelEncoder函数简介(编码与编码还原)、使用方法、具体案例之详细攻略
- 面向对象开发===继承特点
- OpenCV | OpenCv常用函数(代码类)
- mysql php加速_mysql存储过程加速 - mysql数据库栏目 - 自学php
- struts2原理分析之反射技术动态获取属性
- 按自己喜欢的方式过一生?
- python时间差转换成天数_Python实现计算两个时间之间相差天数的方法
- python3-day4(装饰器)
- 七、Framework类库
- (201)数字6种表示方式
- Windows Server 2012 禁止使用Ctrl+Alt+Del 以及禁止开机启动服务器管理器
- Mastermind游戏
- nacos整合springmvc:解决使用@Value或@NacosValue无法从nacos配置中心动态获取最新配置数据问题
- 北斗GPS同步时钟(授时系统)技术原理详解
- 开发容器式微服务的第一步
- 解决联想ThinkPad 小红点键盘4X30K12182 多功能蓝牙键盘掉线问题