ReparsePointAware 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
文件和目录实用工具函数的集合,用于确保正在交互的文件和文件夹的路径上没有 Windows 重分析点,并且代码中的路径与磁盘上的实际路径匹配。
重分析点注入是安全漏洞的已知/常见向量。 有关它们的更多常规信息,请参阅此处: https://docs.microsoft.com/en-us/windows/win32/fileio/reparse-points
这组函数的目标是获取 Windows 文件句柄,验证它是否位于预期路径中,然后使用相同的句柄执行所有文件操作。 验证文件并使用文件路径执行任何其他操作不是一种安全模式,因为攻击者可能会利用文件检查与基于文件路径的文件操作之间的争用。 此类攻击称为“检查时间/使用时间” (TOCTOU) 。 为避免这种情况,此类将保留文件句柄,并在句柄被视为位于正确位置后对句柄执行所有操作。 由于所有操作都基于文件句柄,因此我们知道我们正在修改已验证为正确的文件。
public static class ReparsePointAware
type ReparsePointAware = class
Public Class ReparsePointAware
- 继承
-
ReparsePointAware
方法
CreateDirectory(String) |
在指定路径中创建所有目录和子目录。 如果目录的规范路径包含 Windows 重分析点,则会引发 UnauthorizedAccessException。 |
CreateText(String) |
创建或打开用于写入 UTF-8 编码文本的文件。 如果打开现有文件,该文件将被截断。 如果文件的规范路径包含 Windows 重分析点,则会引发 UnauthorizedAccessException 且不会写入任何内容。 |
DeleteFile(String) |
删除指定的文件。 如果文件的规范路径包含 Windows 重分析点,则会引发 UnauthorizedAccessException 并且不会删除任何内容。 |
GetFinalPath(SafeFileHandle) |
获取给定 SafeFileHandle 的完整规范路径,并展开每个重新分析点。 |
HasReparsePoints(SafeFileHandle, String) |
检查 SafeFileHandle 表示的文件系统对象是否具有与给定的 expectedPath 匹配的规范路径。 |
MoveFile(String, String) |
将指定文件移到新位置,提供要指定新文件名的选项。 如果文件的规范路径包含 Windows 重分析点,则会引发 UnauthorizedAccessException。 |
OpenFile(String, FileMode, FileAccess, FileShare) |
在指定路径上打开 System.IO.FileStream,具有具有读取、写入或读/写访问权限的指定模式以及指定的共享选项。 如果文件的规范路径包含 Windows 重分析点,则会引发 UnauthorizedAccessException。 在执行任何文件操作之前,OpenFile 将首先固定目录。 如果固定目录失败或目录为 ReparsePoint,则将引发 UnauthorizedAccessException。 |
OpenRead(String) |
打开现有文件以进行读取。 如果文件的规范路径包含 Windows 重分析点,则会引发 UnauthorizedAccessException。 |
OpenWrite(String) |
打开一个现有文件或创建一个新文件以进行写入。 如果文件的规范路径包含 Windows 重分析点,则会引发 UnauthorizedAccessException。 |
PinAndRequireNoReparsePoints(String, Boolean) |
打开现有文件或目录的 SafeFileHandle,并确认生成的规范路径与给定路径的规范路径匹配。 生成的 SafeFileHandle 是 IDisposable,可在 using 语句中使用,以确保后续文件操作写入路径,而无需重新分析点。 |
PinHandle(String, Boolean) |
对现有文件或目录采用句柄,以确保它无法移动。 |
RequireNoReparsePoints(String, Boolean) |
如果规范路径与 expectedPath 不同,则引发 UnauthorizedAccessException。 |
RequireSamePath(SafeFileHandle, String) |
如果给定 SafeFileHandle 的规范路径与 expectedPath 不同,则引发 UnauthorizedAccessException。 |
SetFileAttributeNormal(String) |
通过设置 FileAttribute = Normal 检查是否可以删除文件。 如果无法设置属性,则用户没有访问权限 |
WriteAllText(String, String) |
创建一个新文件,向其中写入指定的字符串,然后关闭文件。 如果目标文件已存在,则覆盖该文件。 如果文件的规范路径包含 Windows 重分析点,则会引发 UnauthorizedAccessException 且不会写入任何内容。 |