2011-08-26 130 views
19

假設Windows本地和網絡文件路徑不區分大小寫是否安全?Windows環境中的文件路徑不區分大小寫?

+2

定義「安全」。 NTFS _can_可以配置爲具有區分大小寫的文件名,但幾乎沒有人會這樣做(並且那些通常準備承擔破解程序的責任)。但爲什麼你需要知道這一點? –

+1

@肯,51%沒有臭味。大量的問題 - 通常最有趣的 - 就是沒有合理的答案。 51%表明這不是不知道勾選勾選內容的用戶;不管他的其他缺點如何,他顯然會對接受什麼做出合理的決定。 –

+1

@亨寧,我不同意。如果你問100個問題,其中有50個問題不能被任何人回答,你要麼提出很多不好的問題,要麼提出脫離主題的問題,要麼你自己解決後沒有跟進並回答你自己的問題以造福他人。但當然,你有權利得到你自己的意見。 :) –

回答

16

是的。 Windows(本地)文件系統(包括NTFS)以及FAT和變體不區分大小寫(通常)。網絡文件系統的底層實現可能區分大小寫,但是,允許Windows訪問的大多數軟件(如SMB)都會自動將區分大小寫的文件系統顯示爲不區分大小寫的Windows。

有關詳細信息,我讀了Wikipedia article on filenames中的部分。

20

Windows的區分大小寫實際上是在應用程序打開文件的過程中實現的。 NTFS可以是區分大小寫的文件系統,並且可以愉快地存儲文件,相同的名稱僅在同一個目錄中不同。

在Windows上,最終通過CreateFile API打開所有文件 - 如果將FILE_FLAG_POSIX_SEMANTICS標誌傳遞給調用(並且正在訪問的文件系統本身區分大小寫),那麼文件將根據精確的名稱匹配打開。如果FILE_FLAG_POSIX_SEMANTICS未被傳遞,那麼文件系統會打開一個不區分大小寫的文件,並打開其中一個具有匹配名稱的文件。如果有多於一個,則未定義哪一個實際打開。

大多數C和C++在Windows上運行時實現不提供這種機制的任何訪問,並從來不使用這個標誌,從而只有這樣,才能獲得區分大小寫的行爲是直接使用Windows API。

tl; dr - 您的語言運行庫可能會將您的文件系統暴露爲不區分大小寫或保留大小寫。如果您直接使用Windows API,則可以訪問支持的文件系統,完全區分大小寫。