在不考虑任何实现行为或主机ᴏꜱ的情况下,是否存在设计上不允许在文件或目录名称中使用的字符?
如果允许 ᴀꜱᴄɪɪ ɴᴜʟ 字符,我特别感兴趣(考虑到 Git 有时用作前端) 。
如果不允许这样做,是否可以尝试创建具有坚固性的此类文件导致远程代码执行?
在不考虑任何实现行为或主机ᴏꜱ的情况下,是否存在设计上不允许在文件或目录名称中使用的字符?
如果允许 ᴀꜱᴄɪɪ ɴᴜʟ 字符,我特别感兴趣(考虑到 Git 有时用作前端) 。
如果不允许这样做,是否可以尝试创建具有坚固性的此类文件导致远程代码执行?
是的。索引和树对象都由于其设计而受到限制:
Git 客户端施加了额外的限制,这些限制不是数据文件格式设计的一部分:
路径组件不能命名.git
。
路径组件可能未命名为.
or ..
,以防止您转义您的工作目录。
如果core.protectHFS
设置了,则当从路径组件中删除所有零宽度 Unicode 字符时,剩余部分可能不是.git
.
如果core.protectNTFS
设置了,则路径组件可能不是GIT~1
,.git\
或者.git
后跟空格或点。
不,您也不能使用 libgit2 创建它们,因为它还使用以空字符结尾的字符串来存储路径。这里似乎不太可能存在缓冲区溢出(如果有的话,您会期望缓冲区溢出)。