记一次安全事故排查
来源:互联网 发布:商丘seo 编辑:程序博客网 时间:2024/04/30 16:06
项目组有个项目管理网站wss,搭建在公网之上,今天上班的时候发现访问网站时会跳转到一个广告页面(原地跳转,而不是打开一个新的页面)。
嗯,这就是现象。
下面记录一下整个排查过程。
- 使用Chrome查看网络数据是如何交互的,但是这个方法无效,因为在原地跳转的一瞬间,chrome中网络的数据就已经更新了,而我们希望看到的是如何跳转到这个广告页面的。
- 使用wireshark,过滤,抓包,终于看到,在获取到style.css文件之后,跳转到了一个其他域的请求,其HTTP报头中写着:host:**(广告域);referer:www.wssys.net。也即是从wssys.net中跳转到这个广告里面的。
- 把style.css屏蔽掉,因为我不知道这个向wssys.net的请求是谁发起的,只能按照请求的顺序依次排查,所幸需要排查的不多。style.css如果有个连接(比如图片)是指向wssys.net那么就可能会出现这个refer情况。
- 把style.css屏蔽掉并不work,然后只能去排查代码,在user_upload.php文件中发现了如下一个iframe
<iframe id="frame_content" name="main_frame" frameborder="0" height="1px" width="1px" src="http://www.wssys.net/analytics<?php if ($language == "en") { echo "_en";}?>.html" scrolling="no"></iframe>//终于发现了wssys.net的影子,把这个请求放到浏览器中就会出现刚刚的跳转。因此,应该是这个域名过期了,或者其服务器出现了些什么问题所导致的。
解决方法也就简单了,直接把这个iframe删除即可。
更进一步
接下来的问题很惊心啊,一个iframe中的内容竟然可以去影响外部窗口的location。这个实在是太可怕了,试想,如果一个访问量很大的网站中有个小小的iframe嵌入了某个网站的信息,然后这个网站被人篡改了,这样将会直接导致这个大型网站被跳转到一个什么乱七八糟,甚至是钓鱼页面上。
而更可怕的是如果这个被嵌入的网站是类似于google-analysis的网站(当然google的技术肯定是没问题的),那么全球可能会有很多很多网站都会受到影响。
为此,做了个小小的实验:
index.html<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head><body> 这是main body窗口 <iframe src="http://******(某个域名下)/iframe.html" width="100px" height="100px"/></body></html>
iframe.html<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><script type="text/javascript"> window.parent.location.replace("http://www.baidu.com");</script> </head><body> 这是iframe窗口</body></html>
就这个小小的代码window.parent.location.replace
就会发生 我们上面说的问题。
措施
有时候,对于页面中的iframe并不能简单粗暴的删掉,但是我们又不能完全的信任它是非常安全。我查询了MDN的iframe属性,发现了sandbox这个属性,当然了只支持html5.
iframe属性
通过使用sandbox可以限制iframe中所允许做的操作。
sandbox包含如下四个属性:
- allow-same-origin: 允许将内容作为普通来源对待。如果未使用该关键字,嵌入的内容将被视为一个独立的源。
- allow-top-navigation:嵌入的页面的上下文可以导航(加载)内容到顶级的浏览上下文环境(browsing context)。如果未使用该关键字,这个操作将不可用。
- allow-forms: 允许嵌入的浏览上下文可以提交表单。如果该关键字未使用,该操作将不可用。
- allow-scripts: 允许嵌入的浏览上下文运行脚本(但不能window创建弹窗)。如果该关键字未使用,这项操作不可用。
所以,我们可以将index.html改为如下:
index.html<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head><body> 这是main body窗口 <iframe src="http://******/iframe.html" width="100px" height="100px" sandbox="allow-scripts"/></body></html>
2 0
- 记一次安全事故排查
- 记一次troubleshooting排查过程
- 记一次服务停止排查
- 记一次Http问题排查
- 记一次死锁问题的排查
- 记一次内核模块内存越界排查
- 记一次内存泄漏排查过
- 记一次sapjco 运行时错误排查
- 记一次Thrift Server错误排查
- 记一次内存泄漏排查问题
- 记一次mysql线上问题排查
- 记一次线上问题的排查过程
- 记一次 BUG 的排查过程
- 一次缓存事故排查
- 一次memcached的排查
- 一次应用OOM排查
- 一次应用OOM排查
- 一次应用OOM排查
- SpringMVC和Struts2的比较分析
- C语言中调用shell命令的方法
- 百度编辑器ueditor 多图上传 文件格式不允许 后台配置项返回出错 解决方法
- flume实现kafka到hdfs实时数据采集 - 有负载均衡策略
- 如何利用反射机制另一个类中的private属性 | Java基础
- 记一次安全事故排查
- 屏幕翻转
- android中的帧动画
- scala Calendar中获取月份遇到“坑”
- Android获取屏幕宽高,密度等
- CentOS(Rehat)下查看系统、cpu信息指令
- 将数据库自增列重置的sql
- 图片加文字的自定义控件
- 跨域 Cookie 实现单点登录