feldegast/url-lookalike-blocker
GitHub: feldegast/url-lookalike-blocker
一款 Firefox 浏览器扩展,通过检测域名中的非许可 Unicode 脚本和易混淆字符来防御 IDN 同形异义攻击。
Stars: 0 | Forks: 0
# url-lookalike-blocker
一款防御 IDN 同形异义攻击的 Firefox 扩展 —— 此类攻击试图通过替换其他 Unicode 脚本中视觉上相似的字符,来注册与合法网站看起来完全相同的域名。例如,可以使用西里尔字母字符(U+0430)来注册虚假的 `apple.com`,该字符在视觉上与相应的拉丁字母 a 难以区分。
**仅适用于 Firefox。** Chrome 的 Manifest V3 不支持拦截 `webRequest`,而动态 Unicode 脚本检测需要此功能。
## 工作原理
当您访问某个 URL 时,该扩展会解码来自 punycode 的主机名,并根据您所在区域设置的允许 Unicode 脚本列表检查每个字符。可能会出现以下三种情况:
1. **拦截** —— 某个字符属于未包含在您允许集合中的脚本。导航将停止,并显示详情页面。
2. **警告** —— 所有字符均来自允许的脚本,但域名包含已知的易混淆字符(即与其他字符在视觉上相似的码位 —— 例如,模拟拉丁字母 `o` 的西里尔字母 `о` U+043E),或者域名混合使用了语言设置或白名单未批准的两种或多种不同脚本中的字符。此时会显示警告页面,并提供继续访问或返回的选项。
3. **允许** —— 所有字符均来自允许的脚本,且不存在易混淆或混合脚本的问题。
拉丁字符始终被允许 —— 禁用它们会导致过多合法 URL 被拦截。
## 拦截页面
当某个 URL 被拦截时,会显示包含以下信息的详情页面:
- 域名的原始(punycode)形式与解码后的 Unicode 形式
- 包含每个不合规字符、其 Unicode 码位以及所属脚本的表格
在拦截页面中,您可以:
- [允许此域名] —— 将该域名添加到白名单,使其不再被拦截,随后导航至该 URL
- [重试] —— 重新尝试访问该 URL;如果当前设置已将其覆盖,页面将会加载,否则拦截页面将再次出现
- [返回] —— 返回上一页
- [打开扩展选项] —— 在新标签页中打开选项页面;如果您启用了所需的脚本并点击“应用”,被拦截的标签页将自动导航回该 URL
## 警告页面
当 URL 通过脚本检查,但包含易混淆字符或混合了多种脚本时,会显示警告页面。该页面包含与拦截页面相同的域名详情,以及一个**看起来像**的列,用于标识每个可疑字符类似于哪个字符。
在警告页面中,您可以:
- [允许此域名] —— 将该域名永久加入白名单
- [仍然继续] —— 仅在当前浏览器会话中允许该域名(重启后清除)
- [重试] —— 更改设置后重新尝试访问该 URL
- [返回] —— 返回上一页
- [打开扩展选项] —— 在新标签页中打开选项页面
## 选项页面
点击工具栏图标即可在新标签页中打开选项页面。
选项页面包含两个部分:
**白名单域名** —— 列出您已明确允许的域名。每个条目都会显示 Unicode 域名(高亮显示可疑字符)、punycode 形式以及触发原始拦截的字符。您可以在此处移除条目。
**允许的语言** —— 包含语言及其对应 Unicode 脚本的表格。每个脚本显示为一个小标签:绿色表示当前允许该脚本,灰色表示不允许。勾选某种语言即可允许其包含的所有脚本。如果某种语言所需的唯一脚本已被允许,该语言将被自动勾选,并显示为灰色标签 —— 例如,启用日语会启用 Han(汉字)脚本,这会导致简体中文和繁体中文被自动勾选。取消勾选某种语言会移除其脚本,并级联影响依赖这些脚本的其他已启用语言。仅使用 Latin(拉丁)脚本的语言会单独列在底部,且始终被允许。
更改**不会自动保存**。请点击 [应用更改] 进行保存。如果在有未保存更改的情况下关闭标签页,浏览器会弹出警告。点击 [放弃更改] 会重新加载页面并放弃所有更改。
## 已知限制
该扩展会检测视觉上类似于其他字符的单个字符(例如,模拟拉丁字母 `a` 的西里尔字母 `а` U+0430)。目前它无法检测类似于单个字符的多字符序列(例如 `rn` → `m`、`vv` → `w`、`cl` → `d`)。如果没有可供对比的已知合法域名列表,检测这些序列会导致过多的误报。
## 许可证
采用 **GPL-3.0 OR MPL-2.0** 双重许可 —— 您可根据自身使用场景选择其中之一。详情请参阅 `dual-licensing.md`。
标签:Firefox, IDN同形异义词攻击, 域名安全, 数据可视化, 浏览器扩展, 网络安全, 自定义脚本, 钓鱼防护, 隐私保护