不考虑任何实现行为或主机ᴏꜱ,是否有设计,文件或目录名称中不允许的字符?
我特别感兴趣(考虑Git有时用作前端)如果允许ᴀꜱᴄɪɪɴᴜʟ字符。
如果不允许这样做,那么尝试创建具有坚固性的文件会导致远程代码执行吗?
答案 0 :(得分:4)
是。索引和树对象由于其设计而受到限制:
NUL
不能位于路径名中。 git使用空终止字符串在内部存储文件名,包括in the index和tree objects。
/
不能在文件名中,因为它是索引中的路径分隔符。
Git客户端还有其他限制,这些限制不属于数据文件格式的设计:
路径组件不能命名为.git
。
路径组件可能未命名为.
或..
,以防止您转义工作目录。
如果设置了core.protectHFS
,那么当从路径组件中删除所有zero-width Unicode characters时,其余部分可能不是.git
。
如果设置了core.protectNTFS
,则路径组件可能不是GIT~1
,.git\
或.git
,后跟尾随空格或点。
不,你不能用libgit2创建那些,因为它也使用空终止字符串来存储路径。这里似乎不太可能存在缓冲区溢出的可能性(如果有的话,你会发现缓冲区欠载)。