我的CDN文件竟然被篡改了

事情的开始是我发现我的在线人数统计竟然都是0了,然后点进在线统计页面发现这次并不是我的node服务崩了,统计页面只剩一个本页面的在线人数。

那么说明是blog上加载的在线统计脚本出问题了。

 

然后打开开发者工具看看加载的网络资源。发现两个变红的请求,因为mixed-content(在https页面中加载http资源)被拦截了。其中一个是我的 wss-online2.js ,另一个是 http://61.174.50.211:16100/jquery-1.0.0.1.js ,那么问题来了,这个脚本是哪里加载进来的呢。

再看看上面,发现一个加载成功的 wss-online2.js (https协议加载),点开发现里面并不是我原本写的内容,而是被篡改过的脚本(我把它备份在这里了)。其中大概做了两件事,首先按照原本这个脚本被重定向后的地址 http://dn-jia-io.qbox.me/code/js/wss-online2.js 再次尝试加载这个脚本(我的静态资源都是写的io.luojia.me域名,然后重定向到七牛给的域名),然后再插入一个伪装成jquery的广告脚本。这是运营商给用户插广告的惯用伎俩之一,因为这个请求被篡改了之后下一次肯定不会被篡改,就可以载入正确的内容。

我去七牛仓库里找到了这个文件,发现里面内容就是被篡改过的。

我又删掉了此副本并手动请求了一次这个文件让七牛立刻回源,七牛得到的新文件还是被篡改过的,而我已经多次去服务器确认过源文件并没有问题。

那么来做一些分析

这期间的请求依次如下,

  • 我到blog走的是cloudflare,https连接。
  • cf到我的服务器回源,https连接(当然cf到我的服务器[日本]也不会搞出一个要插入ip为浙江电信的地址
  • 浏览器加载我的域名为io.luojia.me的脚本,还是去cf(https),再到我的服务器(https),被重定向到七牛(七牛设置的回源地址为https,但他们是不是会回落到http就不知道了)

按篡改后脚本里的地址来看,它当时拦截的应该是一个域名为 dn-jia-io.qbox.me 的js请求,而且还是http的。

这就很奇怪了,七牛服务器里的副本是被篡改的,那应该是七牛发出的请求被拦截了,但七牛回源的时候地址是https://io.luojia.me (在我服务器上做的判断为来自七牛的请求返回文件,其它的重定向到七牛),那到底是什么地方出问题了。

另外当时我发现七牛里的副本在5月1号被刷新过一次,而这个脚本的源文件并没有更新过

 

从客服那得到的结论

应该是七牛的CDN从存储服务器拉文件去缓存的时候,请求被劫持了。之前因为不知道还有CDN从存储拉文件这个环节所以怎么也想不通,现在这样的解释就说得通了。




2018年7月起本站文章未经文下加注授权不得拷贝发布。

本博客使用Disqus评论系统,如果看不到评论框,请尝试爬墙。