jQuery源碼中的賭博網站
前言
jQuery源碼中有賭博網站?
起因是公司發的一份自查文件,某銀行在日常安全運營過程中發現在部分jQuery源碼中存在賭博和黃色網站鏈接。
鏈接分為好幾個:
- www.cactussoft.cn
- blindsignals.com
- www.planeart.cn/?p=877
如果你的程式碼中使用了jQuery或者間接使用了jQuery,請最好自查一下。
不要以為只有從網上隨便抄來的jQuery源碼才會存在這個問題,正常的jQuery源碼也可能有,比如阿里的CDN上的jQuery源碼中就有。
自查jQuery發現存在問題,追溯至阿里的CDN
在如今React和Vue,Angular佔據前端主流的情況下,仍有大量的網站使用jQuery。
不過因為我現在做的項目比較新,並且使用React,所以以為這份自查文件跟我完全沒關係。
只是因為以前見識過有人在開源js程式碼中埋挖礦的程式碼,所以謹慎起見還是查了查,沒想到我還真的查出了點東西。
自查步驟:
- 第一步,我在程式碼中全局搜索上面三個網址,沒發現問題,果然符合預期。
- 第二步,為了保險起見,我搜了node_modules里的文件,還是沒有發現問題,符合預期。
- 第三步,全局搜索jQuery這個字元串,因為據自查文件描述這個問題主要存在於jQuery中。項目中除了single-spa源碼對jQuery做了兼容處理,其他程式碼一切正常,沒有引用jQuery的地方。
只是有個地方有點奇怪,我在一個奇怪的demo.html中,發現了下面這行引用:
<!-- jQuery -->
<script src="//a1.alicdn.com/oss/uploads/2018/12/26/7bfddb60-08e8-11e9-9b04-53e73bb6408b.js"></script>
上面標註了一個jQuery,下面是一個阿里的CDN的地址。
那麼這個引用裡面是個jQuery?查一查吧。
打開這個js,搜索三個網址,最後真的找到了一個,程式碼如下:
// Based off of the plugin by Clint Helfers, with permission.
// //blindsignals.com/index.php/2009/07/jquery-delay/
delay: function( time, type ) {
time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
type = type || "fx";
return this.queue( type, function( next, hooks ) {
var timeout = setTimeout( next, time );
hooks.stop = function() {
clearTimeout( timeout );
};
});
},
麻了,是個注釋,但是這個網站真的存在,還是個中文站點呢。
這個網站雖然不是賭博網站,但是怎麼看都不是那麼正經,並且和jQuery完全沒關係。
然後我又查了一下這個demo.html的來源,來自阿里的矢量圖標庫網站://www.iconfont.cn/,做前端的對這個站點應該非常熟悉。
然後這個demo.html就是下載個人項目的圖標庫後的演示用例。
正常情況下應該是用不到這個東西的,所以直接刪掉就好了,不過阿里有沒有別的地方用到這個CDN文件就不好說了。
思考
這次我們在阿里CDN上的jQuery庫中都能發現賭博網站的鏈接。
雖然它是個注釋,但是萬一它不是呢?
畢竟這三個網址中可能就這個溫和點,另外兩個據描述直接重定向到黃色網站和賭博網站。
這個溫和點的其實也沒有那麼溫和,當這個jQuery文件被一些信譽度較高的站點,比如政府站點引用後,即使是注釋里的網址可能也會被一些搜索引擎解析後用於提高這個垃圾網站的信譽度。
這個事情其實只是冰山一角而已,採用的方式雖然隱蔽但也總算有跡可循,之前爆出的js挖礦程式碼,更加隱蔽。
不談這種引用外鏈的方式,對現在的前端而言,node_modules更是一個大黑盒。
主流的React這類庫可能安全性還行,畢竟一天到晚讀源碼背八股文面試的朋友那麼多,所以沒什麼問題。
像很多依賴庫都是一兩個人維護,就算他們不使壞,依賴庫的依賴庫呢?
這麼龐大的依賴庫鏈,實際上隱藏著的是巨大的安全隱患。
像上面提到的這個網站,你看鏈接里有個2009,可見這玩意並不年輕,一直默默地在每個jQuery網站中運行,並沒有被人發現。
那麼更多的這種程式碼是不是已經存在於各種各樣的網站中了呢?
無腦複製粘貼的前端那麼多,他們甚至都不願意讀一下自己複製的程式碼,更何況審查依賴庫?
如果今天阿里這個CDN裡面埋的是個挖礦程式碼,那麼我們的討論風格還會這麼輕鬆有趣嗎?
想了想,答案是:更加有趣了。O(∩_∩)O