主要观点:Go 编译器在正常编译时会跳过以_test.go结尾的文件,这些文件用go test命令编译并插入一些用于运行测试函数的代码。通常测试文件foo.go和foo_test.go相邻。若文件看似以_test.go结尾但实际不是,则会用于常规构建。存在利用各种不可见字符如变音选择器等制造“假测试文件”来降低密码安全性等恶意行为,多数工具不显示这种情况,如 Vim、VSCode 等,git CLI 在core.quotePath=true(默认)时会显示字节序列,GitHub 对包含此类技巧的 PR 会显示警告但未将其视为安全问题,作者报告给相关方后未得到重视,虽未尝试实际攻击但认为这是隐藏恶意代码的好方法,在某些项目中可作为类似方案的一步。
关键信息:Go 编译器编译规则、“假测试文件”的制造方式、相关工具的显示情况、各方对该问题的态度及可能的攻击方式。
重要细节:如变音选择器U+FE0E、传统的同形异义技巧b_t\u0435\u0455t.go等,以及不同工具在显示文件时的特点等。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。