前言

jQuery源码中有赌博网站?

起因是公司发的一份自查文件,某银行在日常安全运营过程中发现在部分jQuery源码中存在赌博和黄色网站链接。

链接分为好几个:

  • www.cactussoft.cn
  • blindsignals.com
  • www.planeart.cn/?p=877

如果你的代码中使用了jQuery或者间接使用了jQuery,请最好自查一下。

不要以为只有从网上随便抄来的jQuery源码才会存在这个问题,正常的jQuery源码也可能有,比如阿里的CDN上的jQuery源码中就有。

自查jQuery发现存在问题,追溯至阿里的CDN

在如今ReactVueAngular占据前端主流的情况下,仍有大量的网站使用jQuery

不过因为我现在做的项目比较新,并且使用React,所以以为这份自查文件跟我完全没关系。

只是因为以前见识过有人在开源js代码中埋挖矿的代码,所以谨慎起见还是查了查,没想到我还真的查出了点东西。

自查步骤:

  • 第一步,我在代码中全局搜索上面三个网址,没发现问题,果然符合预期。
  • 第二步,为了保险起见,我搜了node_modules里的文件,还是没有发现问题,符合预期。
  • 第三步,全局搜索jQuery这个字符串,因为据自查文件描述这个问题主要存在于jQuery中。项目中除了single-spa源码对jQuery做了兼容处理,其他代码一切正常,没有引用jQuery的地方。

只是有个地方有点奇怪,我在一个奇怪的demo.html中,发现了下面这行引用:

<!-- jQuery -->
<script src="https://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.
// http://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的来源,来自阿里的矢量图标库网站:https://www.iconfont.cn/,做前端的对这个站点应该非常熟悉。

然后这个demo.html就是下载个人项目的图标库后的演示用例。

正常情况下应该是用不到这个东西的,所以直接删掉就好了,不过阿里有没有别的地方用到这个CDN文件就不好说了。

思考

这次我们在阿里CDN上的jQuery库中都能发现赌博网站的链接。

虽然它是个注释,但是万一它不是呢?

毕竟这三个网址中可能就这个温和点,另外两个据描述直接重定向到黄色网站和赌博网站。

这个温和点的其实也没有那么温和,当这个jQuery文件被一些信誉度较高的站点,比如政府站点引用后,即使是注释里的网址可能也会被一些搜索引擎解析后用于提高这个垃圾网站的信誉度。

这个事情其实只是冰山一角而已,采用的方式虽然隐蔽但也总算有迹可循,之前爆出的js挖矿代码,更加隐蔽。

不谈这种引用外链的方式,对现在的前端而言,node_modules更是一个大黑盒。

主流的React这类库可能安全性还行,毕竟一天到晚读源码背八股文面试的朋友那么多,所以没什么问题。

像很多依赖库都是一两个人维护,就算他们不使坏,依赖库的依赖库呢?

这么庞大的依赖库链,实际上隐藏着的是巨大的安全隐患。

像上面提到的这个网站,你看链接里有个2009,可见这玩意并不年轻,一直默默地在每个jQuery网站中运行,并没有被人发现。

那么更多的这种代码是不是已经存在于各种各样的网站中了呢?

无脑复制粘贴的前端那么多,他们甚至都不愿意读一下自己复制的代码,更何况审查依赖库?

如果今天阿里这个CDN里面埋的是个挖矿代码,那么我们的讨论风格还会这么轻松有趣吗?

想了想,答案是:更加有趣了。O(∩_∩)O

jQuery源码中的赌博网站的更多相关文章

  1. Jquery源码中的Javascript基础知识(一)

    jquery源码中涉及了大量原生js中的知识和概念,文章是我在学习两者的过程中进行的整理和总结,有不对的地方欢迎大家指正. 本文使用的jq版本为2.0.3,附上压缩和未压缩版本地址: http://a ...

  2. jquery源码中noConflict(防止$和jQuery的命名冲突)的实现原理

    jquery源码中noConflict(防止$和jQuery的命名冲突)的实现原理 最近在看jquery源码分析的视频教学,希望将视频中学到的知识用博客记录下来,更希望对有同样对jquery源码有困惑 ...

  3. jQuery源码中的“new jQuery.fn.init()”什么意思?

    所有文章搬运自我的个人主页:sheilasun.me 引子 最近打算试试看看jQuery的源码,刚开个头就卡住了.无论如何都理解不了jQuery源码入口部分中的 return new jQuery.f ...

  4. Jquery源码中的Javascript基础知识(三)

    这篇主要说一下在源码中jquery对象是怎样设计实现的,下面是相关代码的简化版本: (function( window, undefined ) { // code 定义变量 jQuery = fun ...

  5. Jquery源码中的Javascript基础知识(二)

    接上一篇,jquery源码的这种写法叫做匿名函数自执行 (function( window, undefined ) { // code })( window ); 函数定义了两个参数window和u ...

  6. 关于jQuery源码中(function(window,undefined){//dosomething()})(window)写法解释

    一.首先是最常见的闭包 (Closure) 范式自执行函数的写法,这里用匿名函数封装(构造块级作用域),避免了匿名函数内部的代码与外部之间发生冲突(如使用了相同的变量名). (function() { ...

  7. jQuery 源码中的 camelCase

    先看一下源码 //65-72行 // Matches dashed string for camelizing //匹配连字符 ‘-’ 和其后的第一个字母或数字,如果是字母,则替换为大写,如果是数字, ...

  8. jquery源码中的(function(window, undefined){})(window)【转】

    (function( window, undefined ) {})(window);这个,为什么要将window和undefined作为参数传给它? (function( $, undefined ...

  9. Jquery源码中的Javascript基础知识(四)— jQuery.fn.init方法

    $() 即调用了jQuery.fn.init方法 jQuery = function( selector, context ) { return new jQuery.fn.init( selecto ...

随机推荐

  1. C++/CLR 使用(VS2012,VS2013,VS2015)编写

    转载自:http://www.th7.cn/system/win/201509/129417.shtml VS2010以及以前的版本,创建项目时都可以在CLR下找到"Windows窗体应用程 ...

  2. ubuntu修改软件源的方法

    最快方法--替换法 刚安装好的ubutun,打开source.list后,用vim替换的方法将所有的us提付出替换为 cn,然后保存退出,更新即可. # vim /etc/apt/source.lis ...

  3. 分布式系统ID

    Leaf--美团点评分布式ID生成系统 前言 在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识.如在美团点评的金融.支付.餐饮.酒店.猫眼电影等产品的系统中,数据日渐增长,对数据分库分表后需 ...

  4. Vulnhub实战-FALL靶机👻

    Vulnhub实战-FULL靶机 下载地址:http://www.vulnhub.com/entry/digitalworldlocal-fall,726/ 1.描述 通过描述我们可以知道这个靶机枚举 ...

  5. 热身训练4 Eighty seven

    Eighty seven 简要题意: n个卡片,其中第i个卡片的数值为$a[i]$.一共q次询问,每次询问将删去其中3个卡片(可能删除若干相同的卡片)后,问能否选出10个卡片,数值之和等于87. n≤ ...

  6. RAW RGB格式

    RAW RGB格式 10bit Raw RGB, 就是说用10bit去表示一个R, G, 或者B, 通常的都是用8bit的. 所以你后面处理时要把它转换为8bit的, 比较简单的方法就是将低两位去掉, ...

  7. js实现日期格式化封装-八种格式

    封装一个momentTime.js文件,包含8种格式. 需要传两个参数: 时间戳:stamp 格式化的类型:type, 日期补零的方法用到es6语法中的padStart(length,'字符'): 第 ...

  8. ELK 脚本自动化删除索引

    kibana有自带接口,可通过自带的API接口 通过传参来达到删除索引的目的. # 删除15天前的索引 curl -XDELETE "http://10.228.81.161:9201/pa ...

  9. 面试官:能手写实现call、apply、bind吗?

    1 call.apply.bind 用法及对比 1.1 Function.prototype 三者都是Function原型上的方法,所有函数都能调用它们 Function.prototype.call ...

  10. ORA-01756: quoted string not properly terminated

    导入sql文件报错:ORA-01756: quoted string not properly terminated 字符集的中英文问题: 临时解决方法:export NLS_LANG=AMERICA ...