文档章节

利用 onload 事件监控跨站资源

x
 xiaocnblogs
发布于 2015/05/06 10:24
字数 1032
阅读 2
收藏 0

用过 CSP 的都很郁闷,上报的只有违规的站点名,却没有具体路径。这是缺陷,还是特意的设计?

显然,CSP 是为安全定制的,里面的规范自然要严格制定,否则就会带来新的安全问题。如果支持详细路径的上报,那又会引出什么问题?

由于 CSP 会上报所有的请求,甚至包括重定向的,因此可以用来探测重定向后的地址。假如已登录的用户访问 login.xx.com 会重定向到 xx.com/username,那么攻击者设计一个只允许重定向前的规则的页面,用户访问后,重定向后的 URL 就会当做违规地址上报给攻击者,这其中就包括了用户名。

如果支持详细路径的上报,这简直就是灾难,就用来探测的用户隐私信息了。事实上目前只上报主机名,都能进行一些利用,例如这篇 Using Content-Security-Policy for Evil。

不过新的规范总是在改进,未来也许只上报重定向前的 URL。但在这之前,我们只能接受这些鸡肋的上报日志。

规则不灵活

CSP 目前只支持白名单列表,这多少有些死板。

更糟的是,不同规则之间无法继承和共享。例如默认有个 default-src 规则,但其他的规则会覆盖它,而不是继承它。这就导致各个规则之间,出现很多的重复,使得整个字符串变的冗长。

无法和页面交互

CSP 的监控和上报,是在浏览器后台自动处理的,没有提供一个事件供页面进行交互。

这样就只能使用统一方式强制处理了,而无法交给页面脚本,更好的来自定义处理。

上报方式不可控

如果处理方式有多种选择,那么统一处理也无可厚非。

但事实上 CSP 的上报方式及格式,没有任何可选余地。只能使用 POST + JSON 的方式提交,并且其中的字段十分累赘,甚至把规则里的白名单列表也发上来了。

此外,也无法设定一个缓存时间,控制重复上报的间隔。在配置白名单遗漏时,会出现大量的误报,严重消耗资源。

浪费带宽

在较新的 Chrome 里,能够使用 meta 标签在前端页面定义 CSP 规则,但其他浏览器目前仍不支持。

为了能够统一,大多仍使用 HTTP 头部输入的方式。由于规则通常都很长,导致每次页面访问,都会额外增加数百字节。

维护繁琐

如果是通过 Web 服务开启的,那么每次调整策略,都得修改配置甚至重启服务,很是麻烦。

兼容性不高

目前只有高版本的浏览器支持,而 IE 系列的则几乎都没能很好的支持。

如果某些攻击只争对低版本的浏览器,那么很有可能出现大量遗漏。

模拟的 CSP

原理

事实上在 CSP 出现的好几年前,就有一个能够监控跨站资源的方案,下面就来分享下。

写过 JS 的都知道,如果需要给大量元素监听事件,无需对每个元素上都进行绑定,只要监听它们的容器即可。当具体的事件冒泡到容器上,通过 event.target 即可获知是哪个元素产生的。

脚本、图片、框架等元素加载完成时,都会产生 onload 事件;而所有元素都位于『文档』这个顶级容器。因此我们监听 document 的 onload 事件,即可获知所有加载资源的元素。

不过 onload 这个事件比较特殊,无法通过冒泡的方式来监听。但在 DOM-3 标准模型里,事件还有一个『捕获』的概念,这也是为什么 addEventListener 有第三个参数的原因。

© 著作权归作者所有

x
粉丝 2
博文 28
码字总数 9785
作品 0
长沙
私信 提问
监控平台前端SDK开发实践

作者简介:杨婷,美团点评点餐终端团队成员。 监控平台 监控的重要性和必要性不必多说,这是提高故障处理能力和保障服务质量所必须的一环。 那么监控究竟要做什么呢?简而言之:及时上报错误...

美团点评点餐
2017/08/16
0
0
JavaScript多种跨域方式

JSONP方式 这种方法即引入不同源的脚本,该脚本载入后会调用全局的某个方法的,所以只要本页面提供该方法给它调用即可,从而达到跨域的目的。具体应用有jQuery.ajax的jsonp调用,也有script标...

前端届的科比
2015/09/05
99
0
WeX5 V3.1.2 正式版发布,跨端移动开发框架

基于V3.1.1正式发布(2015-5-15)修正如下问题: 1. onLoad, onReceive 时序问题: windowReceiver实现方案: (1)、参数在model onLoad之前传入,即data执行刷新和新增前传入; (2)、onReceive...

muyu
2015/06/01
1.4W
3
web前端必须关注的4个性能指标

关于页面相应时间,有一条著名的“2-5-8原则”。当用户访问一个页面: 在2秒内得到响应时,会感觉系统响应很快; 在2-5秒之间得到响应时,会感觉系统的响应速度还可以; 在5-8秒以内得到响应...

课工场CC老师
2017/11/07
12
0
一步一步搭建前端监控系统:如何监控资源加载错误?

摘要: 资源加载失败会破坏产品功能以及用户体验.... 作者:一步一个脚印一个坑 原文:搭建前端监控系统(三)静态资源加载监控篇 Fundebug经授权转载,版权归原作者所有。 一步一步搭建前端...

Fundebug
2019/08/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Hadoop入门

概述 Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。Hadoop实现了一个分布式文...

阿dai学长
34分钟前
34
0
Go Web 编程之 数据库

概述 数据库用来存储数据。只要不是玩具项目,每个项目都需要用到数据库。现在用的最多的还是 MySQL,PostgreSQL的使用也在快速增长中。 在 Web 开发中,数据库也是必须的。本文将介绍如何在...

darjunlee
今天
79
0
spring-boot-maven-plugin not found的解决方案。

通过IDE创建一个springboot项目, <plugin> <groupId>org.springframework.boot</groupId>//这行红色 <artifactId>spring-boot-maven-plugin</artifactId>//这行红色</plugin> 提示sprin......

一片云里的天空
今天
92
0
OSChina 周三乱弹 —— 我可能是个憨憨

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @宇辰OSC :分享Hare Je的单曲《Alan Walker-Faded(Hare Je remix)》: #今日歌曲推荐# 可以放松大脑的一首纯音乐 《Alan Walker-Faded(Har...

小小编辑
今天
617
6
搞定SpringBoot多数据源(3):参数化变更源

春节将至,今天放假了,在此祝小伙伴们新春大吉,身体健康,思路清晰,永远无BUG! 一句话概括:参数化变更源意思是根据参数动态添加数据源以及切换数据源,解决不确定数据源的问题。 1. 引言...

mason技术记录
昨天
99
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部