我们使用七牛的 "镜像存储" 功能, 镜像源设置到 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 载入, 先排除 "浏览器 <---[路由/长城等]---> 七牛" 中间被改动的可能性.
登录七牛, 在 "内容管理" 里找出我们的文件 assets/lang-en-[chunk].js, 直接下载, 打开一看, 就是上面的代码...
所以推測是七牛去 AWS S3 Singapore 拿源站资源的時候出問題了. 根據被替换的內容估計, 是七牛所用的 DNS/路由被劫持了??
临时的解决方法
登录七牛, 在"内容管理" 里找出有问题的文件, 手动删除... 下次访问时七牛重新一次到源站拿资源.
基本上在七牛网站上找不到有客服, 想查问好像只能在这里.
空间里这么多静态文件,我不可能每次每个文件检查。七牛的可靠性很令人担心哦...
原來在 http://segmentfault.com/qiniu 上有【提交私密工单】連結, 可直接向七牛發問. 1小時內就回覆了我, 也算很快. 內容如下:
证明了我的分析正确, 但说白了就是他们也没法子, 七牛也是受害者...
所谓的解决方式今本不是一个可行方法, 改成IP 只可避免 DNS 劫持. 电信拦截了解析失败的信息(如404)且响应 "状态码" 为 200 的问题今本没有解决. 何况 AWS S3 今本不可能改成IP.
我看真正的解决方法, 是不要使用 "镜像存储" 功能, 自己直接把文件上传到七牛空间.