守卫验证
守卫 (Wasm Guard) 是运行在 TechUI Wasm 核心中的一套主动监测子系统。
如果说“防篡改”是系统的被动防御底线,那么“守卫验证”则是系统的主动合规检查。它负责在运行时高频地校验当前环境是否满足许可证定义的各项约束,确保组件在合法、安全的状态下运行。
许可证合规监测
守卫会严格根据您配置的许可证参数(参见 [解密流程] 章节),对当前运行环境进行逐项比对。
📅 有效期检查 (Expiration)
守卫对有效期的校验策略取决于许可证的类型:
- 正式许可证:对于 项目 / 公司 / 商业 等正式许可证,其
expDate默认为endless(永久)。守卫不会对正式许可证进行过期阻断。 - 开发许可证:这是唯一具有强制截止日期的许可证类型。守卫会校验当前系统时间是否超过了开发许可证定义的结束时间。一旦过期,组件将停止运行,提示您购买正式授权。
- 临时体验 Key:当免费版用户使用“临时 Key”解锁高级组件时,守卫会开启倒计时监测。一旦超时,组件将自动熔断或降级回免费状态。
🔒 项目名称锁定 (Project Title Lock)
当许可证开启了 项目绑定 时,守卫将启动严格的标题监测机制:
- 一致性检查:检测浏览器标题
document.title是否包含了许可证中指定的project名称。 - 劫持对抗:为了防止恶意代码通过
Object.defineProperty劫持document.title属性来欺骗检查,守卫会检测该属性的描述符(Descriptor)。 - 注意:正常的业务代码不需要重写标题属性的 Setter/Getter。一旦检测到非原生的属性定义,将被视为攻击。
🌐 域名/环境绑定 (Domain Binding)
- 逻辑:如果许可证配置了
domainBind或localOnly,守卫会校验window.location.hostname。 - 场景:主要用于限制“本地化部署”的授权不被非法部署到公网环境。
运行时完整性检查
除了校验许可证,守卫还需要确保自身的运行基座(浏览器环境)未被破坏。
🧬 原生方法完整性
TechUI 的 Wasm 模块依赖部分浏览器原生 API 进行通信与渲染。守卫在启动时及运行中会检测这些关键方法是否被第三方脚本篡改或 Hook。
- 监测对象:包括但不限于
console系列方法、setTimeout/setInterval定时器、fetch请求方法等。 - 判定标准:检测这些函数是否为
[native code],防止被恶意代码注入钩子(Hook)以拦截或伪造数据。
📝 签名完整性
- 逻辑:TechUI 会在 DOM 结构的特定位置(如
<head>或<body>的尾部)注入包含授权摘要的注释节点。 - 监测:守卫会轮询检查该签名节点是否存在。人为移除该节点将被视为破坏知识产权展示,触发熔断。
触发机制
守卫验证并非时刻占用主线程资源,而是采用“事件驱动 + 低频轮询”的混合策略。
| 触发方式 | 说明 | 频率 |
|---|---|---|
| 初始化自检 | 组件加载时的首次全量检查。 | 1 次 / 生命周期 |
| 高级调用 | 当代码调用高级组件(如 3D 场景)时触发。 | 按需触发 |
| 心跳轮询 | 利用 Wasm 内部定时器进行的低频状态确认。 | 极低频(对性能无影响) |
⚠️ 开发者注意
为了避免触发误报,请勿在您的业务代码中重写(Override) 浏览器的原生对象方法(如 Date, setTimeout),或使用黑客手段劫持 DOM 属性。这些行为可能会被守卫误判为环境不安全。