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