在不考慮任何實現行爲或主機ᴏꜱ的情況下,在設計中是否存在文件或目錄名中不允許的字符?Git存儲庫的文件名中禁止使用ɴᴜʟ字符嗎?
我特別感興趣(考慮Git有時用作前端)如果允許ᴀꜱᴄɪɪɴᴜʟ字符。
如果不允許這樣做,那麼可以嘗試創建具有堅固性的文件導致遠程代碼執行?
在不考慮任何實現行爲或主機ᴏꜱ的情況下,在設計中是否存在文件或目錄名中不允許的字符?Git存儲庫的文件名中禁止使用ɴᴜʟ字符嗎?
我特別感興趣(考慮Git有時用作前端)如果允許ᴀꜱᴄɪɪɴᴜʟ字符。
如果不允許這樣做,那麼可以嘗試創建具有堅固性的文件導致遠程代碼執行?
是的。該指數和樹對象都施加了限制,因爲它們的設計:
一個NUL
不能在路徑名。 git使用空終止的字符串在內部存儲文件名,包括in the index和tree objects。
A /
不能在文件名中,因爲它是索引中的路徑分隔符。
有通過GIT中的客戶強加額外限制,這是不的數據文件格式設計的一部分:
路徑組件不能被命名.git
。
路徑組件可能不會被命名爲.
或..
,以防止您逃脫工作目錄。
如果core.protectHFS
已設置,則從路徑組件中刪除所有zero-width Unicode characters時,其餘的可能不是.git
。
如果core.protectNTFS
被設置,那麼路徑組件可能不是GIT~1
,.git\
或.git
後面有尾隨空格或點。
不,你不能創建那些libgit2要麼,因爲它也使用空終止字符串存儲路徑。這裏似乎不太可能存在緩衝區溢出的可能性(如果有的話,你會期望緩衝區不足)。
錯誤! A'/'可以在[git repositories](https://github.com/jch/html-pipeline)中使用。如果你[克隆這個](https://github.com/jch/html-pipeline),包含'/'的目錄將被轉換爲2個不同的目錄。在本地克隆的repo上執行'git update'會將目錄分割成大部分ᴏꜱ。 – user2284570
你在說'lib/html'嗎?這是一個帶有'html'目錄的'lib'目錄。 GitHub在他們的網絡用戶界面中折服了這一點 - 這就是爲什麼'lib /'是灰色的。 –
你的意思是這是自動的嗎?對不起,在這種情況下... – user2284570
**不!這不是太寬泛!**如果有不允許的字符,則有**確定的答案!** *(是的,它是)*。 **否則,請解釋如何在ɢɪᴛ資料庫中插入包含ɴᴜʟ字節的文件名!** – user2284570
您的標題詢問NUL是否被允許;問題的主體詢問某些人物是否被允許。由於現有的答案是「是」,這意味着某些字符被禁止,所以我已經相應地改寫了標題。 (我也用普通大寫字母替換了小寫字母;在某些系統中,非ASCII字符可能難以讀取。) –