王一之 发表于 2022-10-4 14:30:13

[分享]怎么判断脚本的危险性

# 前言
油猴脚本是一个很强大的工具,能够方便我们的日常生活,用好了就是一把利器,但这个利器也会被不法分子用于危险用途刺向我们。本篇就来和大家分享一下几个快速判断脚本危险性的方法,也欢迎大家进行补充。

本篇是小白向,主要是从脚本header中去判断,以不会代码的视角来快速判断一个脚本的危险性(对于审核人员也很是,很难的那么去细看代码,看懂了也不理解其业务逻辑)。

安装脚本尽量只从正规的脚本平台进行安装,脚本发布平台可以尽量的保证脚本的一个安全性,但也并非完全100%可靠,如果发现有违规脚本,请向平台举报,一起促进社区的和谐发展。

# 正文
其实总的来说就是,不要碰你不该碰的东西!

## 高危权限
这些权限可能造成你的财产损失、信息泄漏等,凡是有申请以下权限的都需要小心
### GM_cookie
此方法能够获取到你的登录用户信息token,凡是需要申请`GM_cookie`的脚本都需要小心,如果拿到了你的登录token可以进行很多为所欲为的操作,平常很少脚本需要此种权限,如果有需要多加注意,例如下面的脚本:
```js
// ==UserScript==
// @name         油猴中文网优化
// @namespace    https://bbs.tampermonkey.net.cn/
// @version      0.1
// @descriptiontry to take over the world!
// @author       You
// @match      https://bbs.tampermonkey.net.cn/
// @match      http://www.baidu.com/
// @grant      GM_cookie
// @connect      baidu.com
// ==/UserScript==

GM_cookie("list",{url:"http://www.baidu.com/"},function(){
console.log(arguments);
});
```
我这只是一个针对油猴中文网的一个脚本,但是我却申请了:`GM_cookie`权限,其实到这一步**可能**还没毛病的(可能真想操作你油中账号,但也不应该要GM_cookie权限),但是这里却@match和@connect了baidu.com(百度),这是99%想干坏事,这样申请权限后,他就能完全操作你百度账号

### GM_xmlhttpRequest
此方法与上面一样,可以无视浏览器的安全机制,直接跨域调用一些危险接口,这个方法是经常使用的,在使用时需要关注脚本头部声明的`@connect`,如果`@connect`是一个常见且有重要信息的域名,例如上面的百度,此脚本并未与百度有关联,那么此脚本也会有很大程度的危险性。未声明`@connect`也可以跨域调用危险接口,但会弹出类似下方的窗口,在允许权限时需要注意请求的域名是否是一个安全的或者和业务相关的域名,然后就是请求地址是否正常,如果不是,那么也很可能是一个危险的脚本。

!(data/attachment/forum/202210/04/135922vkdkshkr1h1mgv6g.png)

## 中危操作
这些操作一般获取不到太大的权限,但也可以造成一些损害,并且不易排查
### 脚本的跨域操作
可以使用`GM_xmlhttpRequest`进行跨域,但是也可以用更隐蔽的方法去传输数据,关于这点可以怎么实现就不细说了。排查的话,使用f12的开发者工具->网络(network),选中第三方请求,然后一个一个的去找是否有一些敏感的请求。不过得益于浏览器的安全机制,一般无法获取到一些危险的权限与信息。
!(data/attachment/forum/202210/04/142436kh5aard66s66m6x7.png)

### match
当脚本头部出现`@match`一个比较敏感的网站时也需要注意,当你访问这个网站时脚本就能运行,跨域机制将失效。另外也会有一些脚本使用通配:`@match *://*/*`的形式,这种十分不便排查,可以在代码中看看有没有敏感的字眼。


## end
暂时想不到啥简单方便好排查的方法了,抛砖引玉看看大佬们有没有更多的想法

笑尘天雨 发表于 2022-10-4 15:33:07

## cookie是最重要的
```
由于http是无状态的,所以cookie是存储了登陆信息。只要别人能拿到你cookie就能用它登陆你的账号
```

所以与cookie相关的都是很危险的行为,比如GM_cookie, 或者直接注入脚本拿document.cookie,又或者请求第三方网页携带cookie。

## 不要迷信跨域限制,尽量不使用第三方js
```
想必你们都知道跨域的概念,但是你们应该也要了解到,只需要后台设置允许跨域,那么就能做到跨域请求,而且在跨域请求的时候携带cookie,虽然https对直接携带cookie做了限制,但是不代表不能把cookie取出来当做参数传给后端
```

so,不要使用第三方js或者在你能确保没问题的情况下使用第三方js,对于一些新手来说这一点几乎是致命的,因为他们根本不会去关注第三方js是否会进行请求

## 没有第三方js,没有@connect就安全了吗?
```
并不会,具体的就不好说了,不然被看到了还以为是我教会它们这样干一样。想了解的就去搜[前端 攻击]。
```
对了,还能通过appendChild等方式直接将脚本放到宿主页面,防不胜防。

## 最后,第三方js还存在一种问题
···
那就是被替换或者被劫持被注入脚本,这种情况就更难察觉了。
[运营商劫持怎么办,出现运营商的流量劫持骚扰广告的处理方法](https://zhuanlan.zhihu.com/p/344984050)
虽然https能在很大程度上防止被劫持,但是不代表做不到劫持。哪怕真的一点问题都没有,那么攻击服务器偷偷替换服务器上的js文件
···
## 最后的最后,没有前端基础的能力慎重使用脚本,有前端基础的务必审查一遍脚本不要使用压缩之后的脚本
```
虽然你可以搜appendChild等关键字来排除,但是如果简单的排个序document[[...'dlihCdneppa'].reverse().join('')]你就找不到了吧?
```
审查代码很重要

浏览器本身的限制就是为了用户的安全,基本这样都逃不过XSS,CSRF等等攻击方式。
而插件本身就会破坏这种情况,导致可攻击方式增加很多,所以请务必审查仔细,或者使用无痕浏览器不登陆的时候使用脚本。


txylyz 发表于 2022-11-21 07:38:04

说的有道理,信息时代,信息安全要小心。

wuzhi 发表于 2022-12-5 12:28:02

这个真的不好断,等到电脑异常时或许已经慢了

lty123 发表于 2022-12-5 15:13:17

学习了!!!

王一之 发表于 2022-12-6 14:41:45

wuzhi 发表于 2022-12-5 12:28
这个真的不好断,等到电脑异常时或许已经慢了

使用后发现也能亡羊补牢

小趴菜 发表于 2023-1-2 10:48:07

ggnb!!!!!!

luckyfh 发表于 2023-9-19 14:46:25

学习了,谢谢

极品小猫 发表于 2023-10-17 15:48:40

没有绝对的安全,早些年还流行运营商DNS广告挟持的年代,就有油猴脚本把恶意脚本嵌入到图片,通过图片来加载恶意代码。

其实读写剪贴板也是一个需要关注的地方,尤其是搭配了 GM_xmlhttpRequest

只能建议使用者尽可能不要使用大集合类的脚本(如集成了返利、网盘密码获取、文库破解),脚本内容越丰富,越难以保证其安全性以及对网页访问时的影响。

有些脚本的目的并不一定是为了嵌入恶意代码,而是收集隐私信息、挖矿
页: [1]
查看完整版本: [分享]怎么判断脚本的危险性