event.isTrusted 是布尔属性,true 表示事件由真实用户触发,false 表示由脚本模拟;它不可伪造,但不能替代后端安全校验,仅适用于前端体验优化或基础防误触。

event.isTrusted 是浏览器原生提供的布尔属性,用于判断一个事件是否由真实用户操作触发(如点击、键盘输入、触摸等),而非通过 dispatchEvent() 等 JavaScript 方法模拟生成。
基本判断逻辑
当事件对象的 isTrusted 属性为 true,表示该事件来自用户交互;若为 false,则说明事件是脚本主动创建并派发的。
- 用户点击按钮 →
click事件的isTrusted === true - 代码调用
button.click()或button.dispatchEvent(new MouseEvent('click'))→ 对应事件的isTrusted === false - 即使使用
new MouseEvent('click', { bubbles: true, cancelable: true })构造,isTrusted仍为false,无法被伪造
常见误判场景与注意事项
不能仅依赖 isTrusted 做安全校验,它只反映事件来源,不保证操作意图合法:
- 自动化测试工具(如 Puppeteer、Selenium)触发的真实浏览器行为,
isTrusted可能为true(因底层仍是用户级输入) - 某些浏览器扩展或辅助技术也可能生成可信事件
- 移动端的触摸事件、焦点事件等同样适用该属性,但需注意兼容性(IE 不支持,其他现代浏览器均支持)
实用检测示例
在事件监听中快速区分来源:
button.addEventListener('click', function(event) {
if (event.isTrusted) {
console.log('✅ 用户真实点击');
// 执行核心业务逻辑,如提交表单、跳转页面
} else {
console.log('⚠️ 脚本模拟触发,可能需拦截或降级处理');
// 例如:忽略自动点击、记录日志、拒绝敏感操作
}
});
与安全策略的配合建议
isTrusted 是轻量级识别手段,适合前端体验优化或基础防误触,但不可替代后端鉴权:
- 涉及支付、删除、权限变更等关键操作,必须由后端验证请求合法性(如 token、Referer、频率限制)
- 可结合时间戳、鼠标路径、点击位置等做辅助判断,提升前端风控粒度
- 避免在
isTrusted === false时直接报错阻断,应按场景选择静默忽略、提示、或要求二次确认

















