You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何限制TamperMonkey脚本仅向特定用户分享并防二次传播?

TamperMonkey脚本定向分享与防二次分享方案分析

结论:这个需求是可行的,但没法做到100%防泄露,只能大幅提升二次分享的门槛

一、用用户指纹做定向验证的实现方法

  • 生成客户端指纹:把浏览器的navigator.userAgent、屏幕分辨率、时区偏移、系统语言,甚至通过canvas绘制固定图形生成的哈希值等特征拼合,做哈希运算得到唯一的用户指纹。
  • 内置白名单指纹:提前收集目标用户的指纹,把这些指纹做成白名单硬编码到TamperMonkey脚本中。脚本运行时先计算当前客户端的指纹,和白名单比对,不匹配则直接终止执行。
  • 简单代码示例:
// 生成简易用户指纹
function getFingerprint() {
  const browserFeatures = [
    navigator.userAgent,
    `${screen.width}x${screen.height}`,
    new Date().getTimezoneOffset(),
    navigator.language,
    // 可选:canvas指纹,提升唯一性
    (() => {
      const canvas = document.createElement('canvas');
      const ctx = canvas.getContext('2d');
      ctx.textBaseline = "top";
      ctx.font = "14px Arial";
      ctx.fillStyle = "#f60";
      ctx.fillRect(125, 1, 62, 20);
      ctx.fillStyle = "#069";
      ctx.fillText("TamperMonkeyVerify", 2, 15);
      return canvas.toDataURL();
    })()
  ];
  // 用base64简单编码,实际可替换为SHA256哈希提升安全性
  return btoa(browserFeatures.join('|'));
}

// 允许使用的用户指纹列表
const allowedUsers = [
  "USER_A_FINGERPRINT",
  "USER_B_FINGERPRINT"
];

// 权限验证逻辑
if (!allowedUsers.includes(getFingerprint())) {
  alert("你没有权限使用该脚本");
  return;
}

// 脚本核心功能代码...

二、防二次分享的先天局限

  • 指纹可被伪造:懂技术的用户可通过修改浏览器参数、使用指纹伪造工具模拟白名单内的指纹,绕过验证。
  • 指纹会自动变化:同一用户更换浏览器、更新系统、调整屏幕分辨率等操作,都会导致指纹改变,需要重新收集并更新白名单。
  • 脚本本身是明文存储:TamperMonkey脚本保存在用户本地,属于可读状态。拿到脚本的人可直接删除指纹校验逻辑,随意复用脚本。

三、提升安全性的补充手段

  • 配合后端验证:把指纹校验逻辑放到自建后端服务中,脚本运行时向服务器发送指纹,由服务器返回是否允许执行的指令。这种方式下,即使拿到脚本也无法绕过后端校验(需自行搭建服务)。
  • 定期更新指纹:给每个用户的指纹设置有效期,定期重新收集并更新脚本内的白名单,降低泄露后被长期滥用的风险。
  • 混淆压缩代码:对指纹生成和校验的代码进行混淆压缩,增加逆向分析的难度,但无法完全阻止破解。

内容的提问来源于stack exchange,提问作者Hunter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 23:15:24