我想防止 C# 中的 Junctions 出现 TOCTOU 问题。我正在从某些目录提供文件。这些目录可能是 SMB/CIFS 共享或任何文件系统(但很可能是 NTFS)的本地驱动器。
鉴于我对这个问题的理解,以下内容应该可以保护我免受它的影响:
打开文件使用
File.Open(foo, FileMode.Open, FileAccess.Read, FileShare.Read)
这应该可以防止任何东西修改文件或上面的目录结构。如果FileNotFoundException
文件在File.Exists
check 和File.Open
.向上移动目录结构,检查每个文件夹是否不是联结,直到我到达根文件夹。
我不担心文件符号链接,因为文件符号链接需要提升的管理访问权限才能创建,并且如果攻击者已经对本地计算机具有提升的管理访问权限,他们很可能已经完全破坏了它。
我认为我不必担心 CIFS,因为我对此事的调查使我相信不可能在 CIFS 上创建符号链接,除非客户端支持 Unix 扩展(Windows 不支持)。
据我所知,Windows 支持的所有其他文件系统都不支持符号链接。