homoglyph进阶用法如何自定义同形字符表让检测能力扩展10倍【免费下载链接】homoglyphA big list of homoglyphs and some code to detect them项目地址: https://gitcode.com/gh_mirrors/ho/homoglyphhomoglyph 是一款同形异义字符Homoglyphs检测库内置超过 9000 条字符混淆映射可在 Java 和 JavaScript 中识别被同形字符伪装的敏感词。本文带你解锁它的进阶玩法自定义同形字符表把默认只覆盖 ASCII 字母数字的检测能力扩展到中文、符号、表情等任意字符场景。为什么默认字符表不够用默认版本只为a-z、A-Z、0-9以及-、.这 64 个字符内置了同形映射也就是说它只能拦截「ϲrEd1ᴛ」这种用西里尔字母、数学花体字母伪装英文单词的变体。但真实场景里攻击者同样可以用全角字符替换半角→用零宽字符、特殊空白符混入文本用其他语种的相似字形替换你业务中的关键字符homoglyph 的检测引擎其实是「数据驱动」的只要往映射表里补充字符对检测能力就会自动扩展。这就是自定义同形字符表的意义。数据从哪来认识生成器目录整个字符表由仓库中的 Python 生成器流水线维护核心目录结构如下generator/ ├── source_data/ # 同形字符对原始数据可自由扩充 │ ├── confusables.txt # Unicode 官方混淆表 │ └── confusables_extras.txt # 作者补充的字符对 ├── templates/ # 输出文件的模板 ├── char_manager.py # 字符集合合并等价于并查集 ├── data_file_parser.py # 数据文件解析器 └── main.py # 一键生成入口运行main.py后会自动重新生成以下产物raw_data/chars.txt每行一组可互换字符raw_data/char_codes.txt对应的 Unicode 码点十六进制javascript/src/homoglyph.js浏览器端同形感知搜索函数node/index.jsnpm 模块版本javascript/tests/js/tests/DataTests.js覆盖所有映射的自动化测试三步完成自定义字符表第 1 步添加你的同形字符对在generator/source_data/目录下新建一个数据文件如my_chars.txt格式与confusables_extras.txt完全一致每行一对十六进制码点用分号分隔#后为注释ff04 ; 24 ; MA # ( $ → ) 200b ; 0020 ; MA # ( 零宽空格 → 普通空格 )解析器data_file_parser.py会自动扫描该目录下的所有文件并合并进字符表无需改动任何代码。char_manager.py中的CharacterManager会把传递关系合并成完整的同形集合例如 A→Α、Α→А 会自动归为同一组。第 2 步控制嵌入哪些目标字符main.py第 11 行的CHARS常量决定了最终 JS 映射表覆盖哪些字符CHARS abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-.想让你的检测覆盖、_或#直接把它们追加到字符串末尾即可。生成器会只为这些字符生成同形映射控制文件体积。第 3 步一键重新生成在项目根目录执行python3 generator/main.py几秒钟后node/index.js、javascript/src/homoglyph.js和全套测试数据就会带着你的新映射重新生成完毕。不想跑生成器运行时直接注入字符表如果你不想改源码重新构建node/index.js还导出了一个buildSearchFunction函数——它接受任意字符映射返回一个定制化的搜索函数var homoglyphSearch require(homoglyph-search); // 默认版直接用预置字符表 var result homoglyphSearch.search(Get free ϲrEd1ᴛ, [credit]); // 定制版传入自己的映射表 var customSearch homoglyphSearch.buildSearchFunction({ : [\u{2025}] }); var r customSearch(mail me at ⸥abc.com, [mail me at abc.com]);这是最快的验证方式适合灰度测试新字符对的效果。用测试验证新字符表每次重新生成后DataTests.js会针对映射表中的每一对字符自动生成一条用例用同形字符替换目标词中的字符断言仍能被检出。运行测试套件cd node npm test全绿即代表新字符表每一行映射都真实生效不用担心「加了数据但不检测」的静默失败。避坑指南Unicode 高码点字符码点超过 UFFFF 的字符如在 JavaScript 中占 2 个 UTF-16 码元.length会虚高。本库的搜索函数使用 ES6for...of按码点遍历已正确处理但你自行扩展makeSymbolArray逻辑时要留意这一点Java 端同理Homoglyph.java使用int表示码点而非char自行扩展时请沿用这一约定新增字符对时尽量只添加「视觉上可互换」的映射过宽的映射如空格族字符全互相等价可能引入误报小结场景推荐做法扩充映射、发布新版本往generator/source_data/加数据文件跑python3 generator/main.py扩大目标字符覆盖修改main.py中的CHARS常量后重新生成快速验证 / 线上灰度运行时用buildSearchFunction注入自定义映射确认映射生效运行node npm test查看自动生成的 DataTests同形字符检测的天花板不在算法而在数据。掌握这套「数据 → 生成 → 测试」的闭环你就能为 homonym 防护构建出远超默认 64 个字符的定制化检测能力。【免费下载链接】homoglyphA big list of homoglyphs and some code to detect them项目地址: https://gitcode.com/gh_mirrors/ho/homoglyph创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考