上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
返回列表 发新帖

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

[复制链接]
  • TA的每日心情
    开心
    2022-11-24 01:43
  • 签到天数: 126 天

    [LV.7]常住居民III

    201

    主题

    2621

    帖子

    2648

    积分

    管理员

    Rank: 10Rank: 10Rank: 10

    积分
    2648

    荣誉开发者喜迎中秋热心会员活跃会员突出贡献三好学生管理员家财万贯油中2周年

    发表于 2022-10-4 14:30:13 | 显示全部楼层 | 阅读模式

    前言

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

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

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

    正文

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

    高危权限

    这些权限可能造成你的财产损失、信息泄漏等,凡是有申请以下权限的都需要小心

    GM_cookie

    此方法能够获取到你的登录用户信息token,凡是需要申请GM_cookie的脚本都需要小心,如果拿到了你的登录token可以进行很多为所欲为的操作,平常很少脚本需要此种权限,如果有需要多加注意,例如下面的脚本:

    // ==UserScript==
    // @name         油猴中文网优化
    // @namespace    https://bbs.tampermonkey.net.cn/
    // @version      0.1
    // @description  try 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也可以跨域调用危险接口,但会弹出类似下方的窗口,在允许权限时需要注意请求的域名是否是一个安全的或者和业务相关的域名,然后就是请求地址是否正常,如果不是,那么也很可能是一个危险的脚本。

    image.png

    中危操作

    这些操作一般获取不到太大的权限,但也可以造成一些损害,并且不易排查

    脚本的跨域操作

    可以使用GM_xmlhttpRequest进行跨域,但是也可以用更隐蔽的方法去传输数据,关于这点可以怎么实现就不细说了。排查的话,使用f12的开发者工具->网络(network),选中第三方请求,然后一个一个的去找是否有一些敏感的请求。不过得益于浏览器的安全机制,一般无法获取到一些危险的权限与信息。
    image.png

    match

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

    end

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

    上不慕古,下不肖俗。为疏为懒,不敢为狂。为拙为愚,不敢为恶。/ 微信公众号:一之哥哥
  • TA的每日心情
    无聊
    2022-8-21 01:21
  • 签到天数: 1 天

    [LV.1]初来乍到

    7

    主题

    64

    帖子

    62

    积分

    初级工程师

    Rank: 4

    积分
    62
    发表于 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能在很大程度上防止被劫持,但是不代表做不到劫持。哪怕真的一点问题都没有,那么攻击服务器偷偷替换服务器上的js文件
    ···

    最后的最后,没有前端基础的能力慎重使用脚本,有前端基础的务必审查一遍脚本不要使用压缩之后的脚本

    虽然你可以搜appendChild等关键字来排除,但是如果简单的排个序document[[...'dlihCdneppa'].reverse().join('')]你就找不到了吧?

    审查代码很重要

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

    已有1人评分好评 油猫币 理由
    王一之 + 1 + 4 赞一个!

    查看全部评分 总评分:好评 +1  油猫币 +4 

    回复

    使用道具 举报

  • TA的每日心情
    开心
    2022-11-23 09:11
  • 签到天数: 1 天

    [LV.1]初来乍到

    0

    主题

    4

    帖子

    4

    积分

    助理工程师

    Rank: 1

    积分
    4

    油中2周年

    发表于 2022-11-21 07:38:04 | 显示全部楼层
    说的有道理,信息时代,信息安全要小心。
    回复

    使用道具 举报

    发表回复

    本版积分规则

    快速回复 返回顶部 返回列表