Поделиться через


ReparsePointAware Класс

Определение

Коллекция служебных функций файлов и каталогов, которые гарантируют, что файлы и папки, с которыми выполняется взаимодействие, не имеют точек повторного анализа 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)

Вызывает исключение UnauthorizedAccessException, если канонический путь отличается от ожидаемого Пути.

RequireSamePath(SafeFileHandle, String)

Вызывает исключение UnauthorizedAccessException, если канонический путь указанного SafeFileHandle отличается от ожидаемого Пути.

SetFileAttributeNormal(String)

Проверяет, можно ли удалить файл, установив параметр FileAttribute = Normal. Если не удается задать атрибут, пользователь не имеет прав доступа

WriteAllText(String, String)

Создает новый файл, записывает в него указанную строку и затем закрывает файл. Если целевой файл уже существует, он будет переопределен. Если канонический путь файла содержит точки повторного анализа Windows, возникает исключение UnauthorizedAccessException и ничего не записывается.

Применяется к