ReparsePointAware Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Raccolta di funzioni di utilità File e Directory che garantiscono l'interazione dei file e delle cartelle in caso di mancata riparse di Windows sui percorsi e che i percorsi nel codice corrispondano ai percorsi effettivi sul disco.
L'inserimento dei punti di reparse è un vettore noto/comune di exploit di sicurezza. Per altre informazioni generali, vedere qui: https://docs.microsoft.com/en-us/windows/win32/fileio/reparse-points
L'obiettivo di questo set di funzioni è ottenere un handle di file di Windows, verificare che sia nel percorso previsto e quindi eseguire tutte le operazioni di file con lo stesso handle. Non è un modello sicuro per verificare il file e quindi eseguire eventuali operazioni aggiuntive usando il percorso del file come utente malintenzionato può sfruttare la corsa tra il controllo del file e l'operazione di file in base al percorso del file. Questa classe di attacco è nota come Time-of-Check/Time-of-Use (TOCTOU). Per evitare questo problema, questa classe conterrà l'handle file ed eseguirà tutte le operazioni sull'handle dopo che è stato considerato nel percorso corretto. Poiché tutte le operazioni si basano sull'handle di file, sappiamo che stiamo modificando il file verificato essere corretto.
public static class ReparsePointAware
type ReparsePointAware = class
Public Class ReparsePointAware
- Ereditarietà
-
ReparsePointAware
Metodi
CreateDirectory(String) |
Crea tutte le directory e le sottodirectory nel percorso specificato. Se il percorso canonico della directory contiene i punti di Windows Reparse, viene generata UnauthorizedAccessException. |
CreateText(String) |
Crea o apre un file per la scrittura di testo con codifica UTF-8. Se si apre un file esistente, il file viene troncato. Se il percorso canonico del file contiene Punti di Windows Reparse, viene generata un'eccezione UnauthorizedAccessException e non viene scritto nulla. |
DeleteFile(String) |
Elimina il file specificato. Se il percorso canonico del file contiene Punti di Windows Reparse, viene generata UnauthorizedAccessException e non viene eliminato nulla. |
GetFinalPath(SafeFileHandle) |
Ottenere il percorso canonico completo di un determinato SafeFileHandle, con ogni punto di ripristino espanso. |
HasReparsePoints(SafeFileHandle, String) |
Verifica se l'oggetto file system rappresentato da SafeFileHandle ha un percorso canonico che corrisponde a quello previsto specificato. |
MoveFile(String, String) |
Sposta il file specificato in un nuovo percorso, consentendo di specificare per esso un nuovo nome. Se il percorso canonico del file contiene Punti di Windows Reparse, viene generata UnauthorizedAccessException. |
OpenFile(String, FileMode, FileAccess, FileShare) |
Apre un file System.IO.FileStream nel percorso specificato, con la modalità specificata con accesso in lettura, scrittura o lettura/scrittura e l'opzione di condivisione specificata. Se il percorso canonico del file contiene Punti di Windows Reparse, viene generata UnauthorizedAccessException. OpenFile aggiungerà prima la directory prima di eseguire operazioni di file. Se l'aggiunta della directory ha esito negativo o la directory è un ReparsePoint, verrà generata un'eccezione UnauthorizedAccessException. |
OpenRead(String) |
Apre un file esistente per la lettura. Se il percorso canonico del file contiene Punti di Windows Reparse, viene generata UnauthorizedAccessException. |
OpenWrite(String) |
Apre un file esistente o crea un nuovo file per la scrittura. Se il percorso canonico del file contiene Punti di Windows Reparse, viene generata UnauthorizedAccessException. |
PinAndRequireNoReparsePoints(String, Boolean) |
Apre un oggetto SafeFileHandle in un file o una directory esistente e conferma che il percorso canonico risultante corrisponde a quello del percorso specificato. Il risultato di SafeFileHandle è IDisposable e può essere usato all'interno di istruzioni using per garantire che le operazioni di file successive vengano scritte in percorsi senza riparse punti. |
PinHandle(String, Boolean) |
Accetta un handle in un file o una directory esistente per assicurarsi che non possa spostarsi. |
RequireNoReparsePoints(String, Boolean) |
Genera UnauthorizedAccessException se il percorso canonico non è uguale a previstoPath. |
RequireSamePath(SafeFileHandle, String) |
Genera UnauthorizedAccessException se il percorso canonico di SafeFileHandle specificato non è uguale a previstoPath. |
SetFileAttributeNormal(String) |
Verifica se un file può essere eliminato impostando FileAttribute = Normale. Se non è possibile impostare l'attributo, l'utente non dispone dei diritti di accesso |
WriteAllText(String, String) |
Crea un nuovo file, scrive la stringa specificata e quindi lo chiude. Se il file di destinazione è già esistente, viene sovrascritto. Se il percorso canonico del file contiene Punti di Windows Reparse, viene generata un'eccezione UnauthorizedAccessException e non viene scritto nulla. |