Git存储库的文件名中是否禁止使用ɴᴜʟ字符?

时间:2015-10-02 15:20:08

标签: git security buffer-overflow rugged null-character

不考虑任何实现行为或主机ᴏꜱ,是否有设计,文件或目录名称中不允许的字符?

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

1 个答案:

答案 0 :(得分:4)

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

  1. NUL不能位于路径名中。 git使用空终止字符串在内部存储文件名,包括in the indextree objects

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

  3. Git客户端还有其他限制,这些限制不属于数据文件格式的设计:

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

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

    3. 如果设置了core.protectHFS,那么当从路径组件中删除所有zero-width Unicode characters时,其余部分可能不是.git

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

    5. 不,你不能用libgit2创建那些,因为也使用空终止字符串来存储路径。这里似乎不太可能存在缓冲区溢出的可能性(如果有的话,你会发现缓冲区欠载)。