1

在不考虑任何实现行为或主机ᴏꜱ的情况下,是否存在设计上不允许在文件或目录名称中使用的字符?

如果允许 ᴀꜱᴄɪɪ ɴᴜʟ 字符,我特别感兴趣(考虑到 Git 有时用作前端) 。
如果不允许这样做,是否可以尝试创建具有坚固性的此类文件导致远程代码执行?

4

1 回答 1

4

是的。索引和树对象都由于其设计而受到限制:

  1. ANUL不能在路径名中。git 使用以空结尾的字符串在内部存储文件名,包括在索引树对象中。

  2. A/不能在文件名中,因为它是索引中的路径分隔符。

Git 客户端施加了额外的限制,这些限制不是数据文件格式设计的一部分:

  1. 路径组件不能命名.git

  2. 路径组件可能未命名为.or ..,以防止您转义您的工作目录。

  3. 如果core.protectHFS设置了,则当从路径组件中删除所有零宽度 Unicode 字符时,剩余部分可能不是.git.

  4. 如果core.protectNTFS设置了,则路径组件可能不是GIT~1.git\或者.git后跟空格或点。

不,您也不能使用 libgit2 创建它们,因为它还使用以空字符结尾的字符串来存储路径。这里似乎不太可能存在缓冲区溢出(如果有的话,您会期望缓冲区溢出)。

于 2015-10-02T20:29:46.727 回答