📌 目的
在浏览器指纹识别体系中,时区(Timezone) 是一个重要的识别参数,网站可通过 JavaScript 获取本地时间偏移量和时区字符串,用于判断用户地理位置与系统环境。
通过伪造时区,可以有效隐藏真实地理位置,防止账号被关联或风控系统发现异常登录行为。
Chromium 浏览器原生提供 --time-zone-for-testing
参数用于修改时区,Easybr 浏览器也支持通过底层源码配置实现时区的全局伪装。
🎯 教学目标
- 了解浏览器如何暴露时区信息
- 掌握 Chromium 命令行参数
--time-zone-for-testing
的使用方法 - 学习源码层如何注入自定义时区
- 结合 Easybr 指纹机制实现动态时区配置
✅ 浏览器时区识别方式
网站通常通过 JavaScript 获取以下两个时区相关信息:
js复制编辑Intl.DateTimeFormat().resolvedOptions().timeZone
new Date().getTimezoneOffset()
输出示例:
Asia/Shanghai
-480
- 第一行为时区名
- 第二行为相对 UTC 的分钟偏移(例如 -480 = UTC+8)
此信息常用于判断账号登录地是否异常,与 IP 地址、语言、字体等配合形成完整指纹。
🛠️ Easybr 修改方式
✅ 方式一:命令行参数注入(推荐)
Chromium 支持如下原生参数:
--time-zone-for-testing="America/New_York"
示例启动命令:
--time-zone-for-testing="Europe/Berlin"
该参数生效后,浏览器所有通过 JS 获取的时区信息将返回指定值,适用于测试、指纹伪装等场景。
✅ 方式二:配置文件注入(Easybrparam)
在 Easybr 浏览器中,可通过配置文件动态传入时区信息:
base::Easybrparam param;
std::string timezone = param.GetValue("fingerprint.timezone");
if (!timezone.empty()) {
command_line->AppendSwitchASCII("time-zone-for-testing", timezone);
}
✅ 支持账号维度设置不同时区,实现一账号一环境,防止穿透关联。
🔨 源码层修改方式(可选)
若希望在源码中硬编码固定时区(不推荐),可修改以下位置:
文件:content/browser/renderer_host/render_process_host_impl.cc
伪代码参考:
std::string tz = base::Easybrparam::GetValue("fingerprint.timezone");
if (!tz.empty()) {
command_line->AppendSwitchASCII("time-zone-for-testing", tz);
}
完成后重新编译:
ninja -C out/Default chrome
🧪 测试工具推荐
以下网站可用于检测时区是否生效:
- 🔗 https://browserleaks.com/javascript
- 🔗 https://amiunique.org/fp
- 🔗 https://whatismybrowser.com
- 🔗 https://ebrower.com/easybrpcclass/gongnengjishu.html
建议同时观察:timezone
、locale
、date offset
、IP geolocation
等是否一致,确保时区伪装可信。
✅ 总结
Chromium 浏览器支持通过 --time-zone-for-testing
参数快速伪装时区,结合 Easybr 可实现动态配置、多账号独立设置,适用于以下场景:
- 🌍 跨境账号运营(IP 时区一致性检查)
- 🛒 多地区模拟登录
- 🧪 自动化测试 & 风控穿透
- 🛡️ 浏览器指纹隔离防检测
Easybr 指纹浏览器已集成多项环境伪造能力(时区、语言、分辨率、内存、GPU、字体、WebGL、Canvas 等),配合代理与账号系统,可构建高匿名、不可穿透的浏览环境。