如何限制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
相关产品推荐
相关产品推荐

