【问题标题】:File paths in Windows environment not case sensitive?Windows 环境中的文件路径不区分大小写?
【发布时间】:2011-08-26 01:10:01
【问题描述】:

假设 Windows 本地和网络文件路径不区分大小写是否安全?

【问题讨论】:

  • 定义“安全”。 NTFS可以配置区分大小写的文件名,但几乎没有人这样做(而且那些这样做的人通常准备承担破坏程序的责任)。但是为什么你需要知道这些呢?
  • @Ken,51% 一点都不臭。很多问题——通常是最有趣的——只是没有合理的答案。 51% 的人表示这不是不知道勾勒勾号的用途的用户;不管他有什么其他错误,他显然会做出一些合理的决定来接受什么。
  • @Henning,我不同意。如果你问了 100 个问题,其中 50 个问题没人回答并回答自己的问题以造福他人。当然,您有权发表自己的意见。 :)
  • 我碰巧看到 Windows 现在有一个 hacky 修复。你可以assign case sensitive attributes to a directory or a per directory basis。即 fsutil.exe 文件 setCaseSensitiveInfo 启用|禁用。不是递归的。

标签: windows


【解决方案1】:

是的。 Windows(本地)文件系统,包括 NTFS,以及 FAT 和变体,(通常)不区分大小写。网络文件系统的底层实现可能区分大小写,但是,大多数允许 Windows 访问它的软件(例如SMB)会自动使区分大小写的文件系统显示为对 Windows 不区分大小写。

有关详细信息,我会阅读Wikipedia article on filenames 中的部分。

【解决方案2】:

Windows 上的区分大小写实际上是在应用程序打开文件的方式中实现的。 NTFS 可以是区分大小写的文件系统,并且可以愉快地存储文件,在同一目录中具有相同名称的只是大小写不同。

在 Windows 上,所有文件最终都通过 CreateFile API 打开 - 如果将 FILE_FLAG_POSIX_SEMANTICS 标志传递给调用(并且正在访问的文件系统本身区分大小写),则文件将基于名称完全匹配。如果FILE_FLAG_POSIX_SEMANTICS 没有被传递,那么文件系统会打开一个不区分大小写的文件,并将打开一个具有匹配名称的文件。如果有多个,则不确定实际打开的是哪个。

Windows 上的大多数 C 和 C++ 运行时实现不提供对此机制的任何访问权限,并且从不使用此标志,因此访问区分大小写行为的唯一方法是直接使用 Windows API。

tl;dr - 您的语言运行时可能会将您的文件系统公开为不区分大小写或保留大小写。如果您直接使用 Windows API,则可以完全区分大小写访问受支持的文件系统。

【讨论】:

  • "并且被访问的文件系统本身是区分大小写的" - 我们可以确定 NTFS 总是满足这一点吗?是否有任何选项可以使某些 NTFS 不区分大小写?
【解决方案3】:

没有。这不是一个安全的假设。

其他答案提供了丰富的信息,但无论他们说什么,这不是一个安全的假设,并且随着时间的推移继续变得更加不安全。

NFST - 可以区分大小写。 我在每个目录的基础上使用它,但您也可以使用整个 NTFS 驱动器。 https://devblogs.microsoft.com/commandline/per-directory-case-sensitivity-and-wsl/

WSL - 区分大小写。 Linux GUI 应用程序和 Android 应用程序进入 Windows。默认情况下,它们都将在本地运行在区分大小写的文件系统上。

【讨论】:

    猜你喜欢
    • 2019-10-12
    • 1970-01-01
    • 2018-03-29
    • 1970-01-01
    • 2019-07-30
    • 2015-06-06
    • 2015-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多