Sdílet prostřednictvím


ReparsePointAware Třída

Definice

Kolekce funkcí souborových a adresářových nástrojů, které zajišťují, že soubory a složky, se kterými se pracuje, nemají na svých cestách žádné spojovací body systému Windows a že cesty v kódu odpovídají skutečným cestám na disku.

Injektáž spojovacího bodu je známý/běžný vektor zneužití zabezpečení. Další obecné informace o nich najdete tady: https://docs.microsoft.com/en-us/windows/win32/fileio/reparse-points

Cílem této sady funkcí je získat popisovač souborů Systému Windows, ověřit, že je v očekávané cestě, a pak provádět všechny operace se soubory se stejným popisovačem. Ověření souboru a následné provedení dalších operací pomocí cesty k souboru není bezpečné, protože útočník může zneužít závod mezi kontrolou souboru a operací souboru na základě cesty k souboru. Tato třída útoku se označuje jako Toctou (Time-of-Check/Time-of-Use). Aby se tomu zabránilo, bude tato třída obsahovat popisovač souboru a provede všechny operace s popisovačem, jakmile bude považován za ve správném umístění. Vzhledem k tomu, že všechny operace jsou založené na popisovači souboru, víme, že upravujeme soubor, u kterého jsme ověřili, že je správný.

public static class ReparsePointAware
type ReparsePointAware = class
Public Class ReparsePointAware
Dědičnost
ReparsePointAware

Metody

CreateDirectory(String)

Vytvoří všechny adresáře a podadresáře v zadané cestě. Pokud kanonická cesta k adresáři obsahuje body obnovení systému Windows, vyvolá se výjimka UnauthorizedAccessException.

CreateText(String)

Vytvoří nebo otevře soubor pro zápis textu s kódováním UTF-8. Při otevření existujícího souboru se soubor zkrátí. Pokud kanonická cesta k souboru obsahuje body obnovení systému Windows, vyvolá se výjimka UnauthorizedAccessException a nic se nezapíše.

DeleteFile(String)

Odstraní zadaný soubor. Pokud kanonická cesta k souboru obsahuje body obnovení systému Windows, vyvolá se výjimka UnauthorizedAccessException a nic se odstraní.

GetFinalPath(SafeFileHandle)

Získejte úplnou kanonickou cestu k danému SafeFileHandle s rozbaleným každým spojovacím bodem.

HasReparsePoints(SafeFileHandle, String)

Zkontroluje, zda objekt systému souborů reprezentovaný SafeFileHandle má kanonickou cestu, která odpovídá dané očekávané cestě.

MoveFile(String, String)

Přesune zadaný soubor do nového umístění s možností zadat nový název souboru. Pokud kanonická cesta k souboru obsahuje body obnovení systému Windows, vyvolá se výjimka UnauthorizedAccessException.

OpenFile(String, FileMode, FileAccess, FileShare)

Otevře System.IO.FileStream na zadané cestě s určeným režimem s přístupem ke čtení, zápisu nebo čtení/zápisu a zadané možnosti sdílení. Pokud kanonická cesta k souboru obsahuje body obnovení systému Windows, vyvolá se výjimka UnauthorizedAccessException. OpenFile nejprve připne adresář před provedením jakékoli operace se soubory. Pokud se připnutí adresáře nezdaří nebo je adresář reparsePoint, vyvolá se výjimka UnauthorizedAccessException.

OpenRead(String)

Otevře existující soubor pro čtení. Pokud kanonická cesta k souboru obsahuje body obnovení systému Windows, vyvolá se výjimka UnauthorizedAccessException.

OpenWrite(String)

Otevře existující soubor nebo vytvoří nový soubor pro zápis. Pokud kanonická cesta k souboru obsahuje body obnovení systému Windows, vyvolá se výjimka UnauthorizedAccessException.

PinAndRequireNoReparsePoints(String, Boolean)

Otevře SafeFileHandle do existujícího souboru nebo adresáře a potvrdí, že výsledná kanonická cesta odpovídá dané cestě. Výsledný SafeFileHandle je IDisposable a dá se použít v rámci příkazů using k zajištění, že následné operace se soubory zapisují do cest bez spojovacích bodů.

PinHandle(String, Boolean)

Převezme popisovač existujícího souboru nebo adresáře, aby se zajistilo, že se nemůže přesunout.

RequireNoReparsePoints(String, Boolean)

Vyvolá Výjimku UnauthorizedAccessException, pokud kanonická cesta není stejná jako expectedPath.

RequireSamePath(SafeFileHandle, String)

Vyvolá Výjimku UnauthorizedAccessException, pokud daná kanonická cesta SafeFileHandle není stejná jako expectedPath.

SetFileAttributeNormal(String)

Zkontroluje, jestli je možné soubor odstranit nastavením FileAttribute = Normal. Pokud atribut nejde nastavit, uživatel nemá přístupová práva.

WriteAllText(String, String)

Vytvoří nový soubor, zapíše zadaný řetězec do souboru a pak soubor zavře. Pokud cílový soubor již existuje, je přepsán. Pokud kanonická cesta k souboru obsahuje body obnovení systému Windows, vyvolá se výjimka UnauthorizedAccessException a nic se nezapíše.

Platí pro