V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
edis0n0
V2EX  ›  程序员

JS 有办法检测当前页面是否有油猴脚本注入吗?接了个在线考试系统外包,客户要求是这样。

  •  
  •   edis0n0 · 2023-02-18 23:08:10 +08:00 · 4888 次点击
    这是一个创建于 625 天前的主题,其中的信息可能已经有所发展或是发生改变。
    19 条回复    2023-02-19 19:25:46 +08:00
    echo314
        1
    echo314  
       2023-02-18 23:13:59 +08:00
    canvas 显示可否?
    i0error
        2
    i0error  
       2023-02-18 23:14:36 +08:00
    您好,这是必应。😊

    根据网络搜索结果¹²³,JS 有办法检测当前页面是否有油猴脚本注入。一种方法是使用 window.GM_info 对象,它是油猴脚本的元数据,可以获取脚本的名称、版本、描述等信息。如果该对象存在,则说明当前页面有油猴脚本注入。另一种方法是使用 document.scripts 集合,它包含了页面上所有的 script 标签,可以遍历它们并检查它们的 src 属性是否包含 tampermonkey.netgreasespot.net 等油猴脚本的域名。如果找到了,则说明当前页面有油猴脚本注入。

    源: 与必应的对话,2023/2/18(1) Tampermonkey 油猴 js hook 教程_pylemon 的博客-CSDN .... https://blog.csdn.net/qq_27648991/article/details/107749532 访问时间 2023/2/18.
    (2) [油猴脚本开发指南]脚本往页面上添加新元素_李恒道的博客 .... https://blog.csdn.net/lihengdao666/article/details/113064736 访问时间 2023/2/18.
    (3) [javascript] 油猴脚本开发整理_业火之理的博客-CSDN 博客. https://blog.csdn.net/yehuozhili/article/details/113727385 访问时间 2023/2/18.




    当然可以。😊

    根据网络搜索结果¹²³,以下是两种检测油猴脚本的示例代码:

    - 使用 window.GM_info 对象:

    ```javascript
    // ==UserScript==
    // @name 检测油猴脚本
    // @namespace test
    // @version 1.0
    // @description 检测当前页面是否有油猴脚本注入
    // @match *://*/*
    // ==/UserScript==

    (function() {
    'use strict';

    // 如果 window.GM_info 对象存在,则说明有油猴脚本注入
    if (window.GM_info) {
    console.log("当前页面有油猴脚本注入");
    // 打印出所有的油猴脚本的名称和版本
    for (let script of window.GM_info.script) {
    console.log(script.name + " " + script.version);
    }
    } else {
    console.log("当前页面没有油猴脚本注入");
    }
    })();
    ```

    - 使用 document.scripts 集合:

    ```javascript
    // ==UserScript==
    // @name 检测油猴脚本
    // @namespace test
    // @version 1.0
    // @description 检测当前页面是否有油猴脚本注入
    // @match *://*/*
    // ==/UserScript==

    (function() {
    'use strict';

    // 定义一个数组,包含了常见的油猴脚本的域名
    let domains = ["tampermonkey.net", "greasespot.net", "userscripts.org", "greasyfork.org"];

    // 遍历所有的 script 标签,检查它们的 src 属性是否包含上述域名之一
    for (let script of document.scripts) {
    let src = script.src;
    if (src) {
    for (let domain of domains) {
    if (src.includes(domain)) {
    // 如果找到了,则说明有油猴脚本注入,并打印出该 script 标签的内容和 src 属性值
    console.log("当前页面有油猴脚本注入");
    console.log(script);
    console.log(src);
    break;
    }
    }
    }
    }
    })();
    ```

    源: 与必应的对话,2023/2/18(1) Tampermonkey 油猴 js hook 教程_pylemon 的博客-CSDN .... https://blog.csdn.net/qq_27648991/article/details/107749532 访问时间 2023/2/18.
    (2) 油猴 Safari 浏览器插件:Tampermonkey 脚本插件 - 掘金. https://juejin.cn/post/7200196102968901690 访问时间 2023/2/18.
    (3) 如何开发一个油猴脚本- 从零开始编写一个油猴脚本_mukes 的 .... https://blog.csdn.net/mukes/article/details/109727662 访问时间 2023/2/18.
    i0error
        3
    i0error  
       2023-02-18 23:15:08 +08:00
    以上内容来自 Bing ,未验证
    liyang5945
        4
    liyang5945  
       2023-02-18 23:16:14 +08:00 via Android
    在线考试系统就不可靠,我猜你们是要禁止文字复制啥的吧,浏览器打开控制台想干什么都可以,我见过有考试客户端是用 electron 套个壳,能防住大部分人了
    i0error
        5
    i0error  
       2023-02-18 23:16:16 +08:00
    看起来是在一本正经胡说八道,忽略。
    renmu
        6
    renmu  
       2023-02-18 23:16:20 +08:00 via Android
    然后反手就把你检测注入的代码干掉了,当然能不能检测到是一回事。
    XiLingHost
        7
    XiLingHost  
       2023-02-18 23:25:36 +08:00   ❤️ 2
    试试直接用 wasm 绘制界面
    比如这样 https://www.egui.rs/#demo
    基本上 js 的注入是没用的
    Micropaper
        8
    Micropaper  
       2023-02-18 23:29:02 +08:00
    一个简单的办法是挟持 console.log ,然后便利内容中是否包含 chrome-extension://xxxx 。不过这个可能需要你研究一下油猴的 xx 有什么特征,当然你也可以只要检测到 chrome-extension:// 就提示用户必须禁掉所有插件再使用你的考试系统,不管他有没有安装油猴。
    laqow
        9
    laqow  
       2023-02-19 00:36:33 +08:00
    electron 打个包多好,为什么要干涉别人的浏览器
    Pastsong
        10
    Pastsong  
       2023-02-19 00:37:50 +08:00
    @i0error V2EX 禁止 ChatGPT 回复 小心被封号
    IvanLi127
        11
    IvanLi127  
       2023-02-19 02:39:38 +08:00 via Android
    有没有一种可能,油猴脚本先下手把你检测代码吃掉
    learningman
        12
    learningman  
       2023-02-19 03:35:36 +08:00 via Android
    @IvanLi127 那就一起放 wasm 里,一部分检测一部分逻辑,这样没法屏蔽
    FFFFourwood
        13
    FFFFourwood  
       2023-02-19 08:36:43 +08:00 via iPhone
    我就是做考试系统的、网页版不能能防作弊,
    得 electron 套壳客户端
    断网清后台
    只留部分白名单
    摄像头 ai 作弊检测
    等等

    考试途中把电脑关机重启
    开机之后依旧是考试界面
    muzuiget
        14
    muzuiget  
       2023-02-19 10:59:55 +08:00
    不行,代码从服务器传到浏览器,怎么运行是浏览器的事了,有足够耐性,始终能逆向出来。

    除非类似视频 DRM ,数据直送硬件层面解密处理,否则没戏。
    zhlxsh
        15
    zhlxsh  
       2023-02-19 11:16:07 +08:00 via iPhone
    @FFFFourwood 13# 这句话是什么意思?
    考试途中把电脑关机重启
    开机之后依旧是考试界面
    bagel
        16
    bagel  
       2023-02-19 11:48:06 +08:00
    HuskyYellow
        17
    HuskyYellow  
       2023-02-19 13:57:15 +08:00
    @FFFFourwood 这种方式有一个办法能跳过去,就是局域网投屏。我之前帮朋友作弊过,也是你这种方式的考试系统。
    MMMMMMMMMMMMMMMM
        18
    MMMMMMMMMMMMMMMM  
       2023-02-19 18:23:01 +08:00
    摄像头,AI 识别物体
    临考简单的发布一个规则,如:画面里必须用纸写上他的名字、日期 or something ,背景必须放盆花之类的...
    作弊成本是很高的,有这技术真没必要赚这个钱,监考只需要找个现成的 AI 物体识别解决方案就行了
    iPc666
        19
    iPc666  
       2023-02-19 19:25:46 +08:00
    单纯用 js 没法检测的到。油猴脚本是在沙箱里的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3335 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 10:54 · PVG 18:54 · LAX 02:54 · JFK 05:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.