Udostępnij za pośrednictwem


ReparsePointAware Klasa

Definicja

Kolekcja funkcji narzędzi plików i katalogów, które zapewniają interakcję plików i folderów bez punktów ponownej analizy systemu Windows w ich ścieżkach i że ścieżki w kodzie są zgodne z rzeczywistymi ścieżkami na dysku.

Wstrzyknięcie punktu ponownego analizy jest znanym/typowym wektorem luk w zabezpieczeniach. Zobacz tutaj, aby uzyskać więcej ogólnych informacji na ich temat: https://docs.microsoft.com/en-us/windows/win32/fileio/reparse-points

Celem tego zestawu funkcji jest uzyskanie dojścia do pliku systemu Windows, sprawdzenie, czy znajduje się w oczekiwanej ścieżce, a następnie wykonanie wszystkich operacji na plikach z tym samym dojściem. Nie jest to bezpieczny wzorzec do zweryfikowania pliku, a następnie wykonania dodatkowych operacji przy użyciu ścieżki pliku, ponieważ osoba atakująca może wykorzystać wyścig między sprawdzeniem pliku a operacją pliku na podstawie ścieżki pliku. Ta klasa ataku jest nazywana czasem sprawdzania/czasu użycia (TOCTOU). Aby tego uniknąć, ta klasa będzie przechowywać dojście do pliku i wykonywać wszystkie operacje na dojściu po uznaniu za w odpowiedniej lokalizacji. Ponieważ wszystkie operacje są oparte na dojściu do plików, wiemy, że modyfikujemy plik, który zweryfikowaliśmy, aby był poprawny.

public static class ReparsePointAware
type ReparsePointAware = class
Public Class ReparsePointAware
Dziedziczenie
ReparsePointAware

Metody

CreateDirectory(String)

Tworzy wszystkie katalogi i podkatalogi w określonej ścieżce. Jeśli ścieżka kanoniczna katalogu zawiera punkty ponownej analizy systemu Windows, zgłaszany jest wyjątek UnauthorizedAccessException.

CreateText(String)

Tworzy lub otwiera plik do zapisywania tekstu zakodowanego w formacie UTF-8. W przypadku otwierania istniejącego pliku plik zostanie obcięty. Jeśli ścieżka kanoniczna pliku zawiera punkty ponownej analizy systemu Windows, wyjątek UnauthorizedAccessException jest zgłaszany i nic nie jest zapisywane.

DeleteFile(String)

Usuwa określony plik. Jeśli ścieżka kanoniczna pliku zawiera punkty ponownej analizy systemu Windows, wyjątek UnauthorizedAccessException zostanie zgłoszony i nic nie zostanie usunięte.

GetFinalPath(SafeFileHandle)

Uzyskaj pełną ścieżkę kanoniczną do danego elementu SafeFileHandle z każdym rozwiniętym punktem ponownej analizy.

HasReparsePoints(SafeFileHandle, String)

Sprawdza, czy obiekt systemu plików reprezentowany przez SafeFileHandle ma ścieżkę kanoniczną zgodną z daną oczekiwaną ścieżką.

MoveFile(String, String)

Przenosi określony plik do nowej lokalizacji, podając opcję określenia nowej nazwy pliku. Jeśli ścieżka kanoniczna pliku zawiera punkty ponownej analizy systemu Windows, zgłaszany jest wyjątek UnauthorizedAccessException.

OpenFile(String, FileMode, FileAccess, FileShare)

Otwiera element System.IO.FileStream w określonej ścieżce, z określonym trybem z dostępem do odczytu, zapisu lub zapisu oraz określoną opcją udostępniania. Jeśli ścieżka kanoniczna pliku zawiera punkty ponownej analizy systemu Windows, zgłaszany jest wyjątek UnauthorizedAccessException. Plik OpenFile najpierw przypnie katalog przed wykonaniem jakichkolwiek operacji na plikach. Jeśli przypinanie katalogu nie powiedzie się lub katalog jest reparsePoint, zostanie zgłoszony wyjątek UnauthorizedAccessException.

OpenRead(String)

Otwiera istniejący plik do odczytu. Jeśli ścieżka kanoniczna pliku zawiera punkty ponownej analizy systemu Windows, zgłaszany jest wyjątek UnauthorizedAccessException.

OpenWrite(String)

Otwiera istniejący plik lub tworzy nowy plik do zapisania. Jeśli ścieżka kanoniczna pliku zawiera punkty ponownej analizy systemu Windows, zgłaszany jest wyjątek UnauthorizedAccessException.

PinAndRequireNoReparsePoints(String, Boolean)

Otwiera plik SafeFileHandle do istniejącego pliku lub katalogu i potwierdza, że wynikowa ścieżka kanoniczna jest zgodna z daną ścieżką. Wynikowy element SafeFileHandle jest IDisposable i może być używany w instrukcjach using, aby upewnić się, że kolejne operacje na plikach są zapisywane w ścieżkach bez punktów ponownej analizy.

PinHandle(String, Boolean)

Pobiera dojście do istniejącego pliku lub katalogu, aby upewnić się, że nie można go przenieść.

RequireNoReparsePoints(String, Boolean)

Zgłasza wyjątek UnauthorizedAccessException, jeśli ścieżka kanoniczna nie jest taka sama jak oczekiwana Ścieżka.

RequireSamePath(SafeFileHandle, String)

Zgłasza wyjątek UnauthorizedAccessException, jeśli podana ścieżka kanoniczna SafeFileHandle nie jest taka sama jak oczekiwanaPath.

SetFileAttributeNormal(String)

Sprawdza, czy można usunąć plik, ustawiając wartość FileAttribute = Normal. Jeśli nie można ustawić atrybutu, użytkownik nie ma praw dostępu

WriteAllText(String, String)

Tworzy nowy plik, zapisuje określony ciąg w pliku, a następnie zamyka plik. Jeśli plik docelowy już istnieje, zostanie zastąpiony. Jeśli ścieżka kanoniczna pliku zawiera punkty ponownej analizy systemu Windows, wyjątek UnauthorizedAccessException jest zgłaszany i nic nie jest zapisywane.

Dotyczy