我们使用七牛的 "镜像存储" 功能, 镜像源设置到 AWS Singapore 的 S3 上, 不加密 http. 我们七牛空间里全是JavaScript, CSS 和 image 的静态文件.

根據七牛的說明:

设置镜像存储,源站资源(文件/图片等)根据初次访问自动同步到七牛云存储,数据平滑迁移。 可使用绑定的自定义域名访问镜像存储的源站资源。格式:http://绑定域名/源站资源相对路径。

我们网站一向是用 https://dn-[空间名字].qbox.me, SSL 载入 JavaScript 的. 用了差不多一年了, 也没有问题, 但今天出大事了.

今天我们发现站里的 JavaScript 很奇怪, 调查发现其中一个 JavaScript 档案的内容被替换了! 变成了:

<!Doctype html><html xmlns="http://www.w3.org/1999/xhtml">  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />  
<title></title>  
</head>  
<script type="text/javascript">  
        var h=window.location.host; 
        window.location="http://search.114so.cn/search_web.html?id=407&kw="+h; 
</script>  
</body></html>  

我立即昏倒.

分析原因

因我们是用 https 载入, 先排除 浏览器 <---[路由/长城等]---> 七牛 中间被改动的可能性.

登录七牛, 在 "内容管理" 里找出我们的文件, 直接下载, 打开一看, 就是上面的代码...

所以推測是七牛去 AWS S3 Singapore 拿源站资源的時候出問題了. 根據被替换的內容估計, 是七牛所用的 DNS/路由被劫持了??

临时的解决方法

登录七牛, 在"内容管理" 里找出有问题的文件, 手动删除... 下次访问时七牛重新一次到源站拿资源.

空间里这么多静态文件,我不可能每次每个文件检查。七牛的可靠性很令人担心哦...

後續

原來在 http://segmentfault.com/qiniu 上有【提交私密工单】連結, 可直接向七牛發問. 1小時內就回覆了我, 也算很快. 內容如下:

刘斌

2015-09-04 14:09

您好:

回源是根据域名解析,或的ip,然后通过网络到指定ip去拉去数据。

此时,每一步七牛都只是一个客户端。

解析时,电信拦截了解析失败的信息,替换为其自己页面,且响应 状态码 为 200 ,此时客户端(七牛)认为拉取成功了,所以保存了这个文件。

此时被拦截的是 镜像源的 域名,不是七牛的域名。

目前在想法避开 这种 运营商 解析失败但响应 200 对 镜像 存储造成的影响。

目前解决方式: 到空间将文件删除。

设置镜像时指定IP,设置 HOST http://developer.qiniu.com/docs/v6/tools/qrsctl.html#img

证明了我的分析正确, 但说白了就是他们也没法子, 七牛也是受害者...

所谓的解决方式今本不是一个可行方法, 改成IP 只可避免 DNS 劫持. 电信拦截了解析失败的信息(如404)且响应 "状态码" 为 200 的问题今本没有解决. 何况 AWS S3 今本不可能改成IP.

我看真正的解决方法, 是不要使用 "镜像存储" 功能, 自己直接把文件上传到七牛空间.