Partager via


ReparsePointAware Classe

Définition

Collection de fonctions utilitaires de fichiers et de répertoires qui garantissent que les fichiers et dossiers en cours d’interaction n’ont aucun point d’analyse Windows sur leurs chemins et que les chemins d’accès dans le code correspondent aux chemins d’accès réels sur le disque.

L’injection de point d’analyse est un vecteur connu/commun d’attaques de sécurité. Pour plus d’informations générales à leur sujet, voir ici : https://docs.microsoft.com/en-us/windows/win32/fileio/reparse-points

L’objectif de cet ensemble de fonctions est d’obtenir un handle de fichier Windows, de vérifier qu’il se trouve dans le chemin attendu, puis d’effectuer toutes les opérations de fichier avec le même handle. Il n’est PAS un modèle sûr de vérifier le fichier, puis d’effectuer des opérations supplémentaires à l’aide du chemin d’accès du fichier, car un attaquant peut exploiter la concurrence entre le case activée du fichier et l’opération de fichier en fonction du chemin d’accès du fichier. Cette classe d’attaque est appelée Time-of-Check/Time-of-Use (TOCTOU). Pour éviter cela, cette classe contiendra le handle de fichier et effectuera toutes les opérations sur le handle une fois qu’il a été considéré comme étant à l’emplacement approprié. Étant donné que toutes les opérations sont basées sur le handle de fichier, nous savons que nous modifions le fichier que nous avons vérifié pour être correct.

public static class ReparsePointAware
type ReparsePointAware = class
Public Class ReparsePointAware
Héritage
ReparsePointAware

Méthodes

CreateDirectory(String)

Crée tous les répertoires et sous-répertoires dans le chemin spécifié. Si le chemin canonique du répertoire contient des points d’analyse Windows, UnauthorizedAccessException est levée.

CreateText(String)

Crée ou ouvre un fichier pour écrire du texte encodé en UTF-8. Lors de l’ouverture d’un fichier existant, le fichier est tronqué. Si le chemin canonique du fichier contient des points d’analyse Windows, UnauthorizedAccessException est levée et rien n’est écrit.

DeleteFile(String)

Supprime le fichier spécifié. Si le chemin canonique du fichier contient des points d’analyse Windows, UnauthorizedAccessException est levée et rien n’est supprimé.

GetFinalPath(SafeFileHandle)

Obtenez le chemin canonique complet d’un SafeFileHandle donné, avec chaque point d’analyse développé.

HasReparsePoints(SafeFileHandle, String)

Vérifie si l’objet de système de fichiers représenté par SafeFileHandle a un chemin canonique qui correspond à l’objet expectedPath donné.

MoveFile(String, String)

Déplace un fichier spécifié à un nouvel emplacement, en permettant de spécifier un nouveau nom. Si le chemin canonique du fichier contient des points d’analyse Windows, UnauthorizedAccessException est levée.

OpenFile(String, FileMode, FileAccess, FileShare)

Ouvre un System.IO.FileStream sur le chemin d’accès spécifié, avec le mode spécifié avec accès en lecture, écriture ou lecture/écriture et l’option de partage spécifiée. Si le chemin canonique du fichier contient des points d’analyse Windows, UnauthorizedAccessException est levée. OpenFile épingle d’abord le répertoire avant d’effectuer des opérations de fichier. Si l’épinglage du répertoire échoue ou s’il s’agit d’un ReparsePoint, UnauthorizedAccessException est levée.

OpenRead(String)

Ouvre un fichier existant pour y accéder en lecture. Si le chemin canonique du fichier contient des points d’analyse Windows, UnauthorizedAccessException est levée.

OpenWrite(String)

Ouvre un fichier existant ou crée un nouveau fichier pour écriture. Si le chemin canonique du fichier contient des points d’analyse Windows, UnauthorizedAccessException est levée.

PinAndRequireNoReparsePoints(String, Boolean)

Ouvre un SafeFileHandle sur un fichier ou répertoire existant et confirme que le chemin canonique résultant correspond à celui du chemin donné. Le SafeFileHandle résultant est IDisposable et peut être utilisé dans les instructions using pour garantir que les opérations de fichier suivantes écrivent dans des chemins sans points d’analyse.

PinHandle(String, Boolean)

Prend un handle sur un fichier ou un répertoire existant pour s’assurer qu’il ne peut pas se déplacer.

RequireNoReparsePoints(String, Boolean)

Lève UnauthorizedAccessException si le chemin canonique n’est pas le même que expectedPath.

RequireSamePath(SafeFileHandle, String)

Lève UnauthorizedAccessException si le chemin canonique de SafeFileHandle donné n’est pas le même que expectedPath.

SetFileAttributeNormal(String)

Vérifie si un fichier peut être supprimé en définissant FileAttribute = Normal. S’il ne peut pas définir l’attribut, l’utilisateur ne dispose pas des droits d’accès

WriteAllText(String, String)

Crée un nouveau fichier, écrit la chaîne spécifiée dans le fichier, puis ferme le fichier. Si le fichier cible existe déjà, il est remplacé. Si le chemin canonique du fichier contient des points d’analyse Windows, UnauthorizedAccessException est levée et rien n’est écrit.

S’applique à