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 Reparse Points,則會擲回 UnauthorizedAccessException。

CreateText(String)

建立或開啟用以寫入 UTF-8 編碼文字的檔案。 如果開啟現有的檔案,則會截斷檔案。 如果檔案標準路徑包含 Windows Reparse Points,則會擲回 UnauthorizedAccessException,而且不會寫入任何內容。

DeleteFile(String)

刪除指定的檔案。 如果檔案標準路徑包含 Windows Reparse Points,則會擲回 UnauthorizedAccessException,而且不會刪除任何專案。

GetFinalPath(SafeFileHandle)

取得指定 SafeFileHandle 的完整標準路徑,並展開每個重新分析點。

HasReparsePoints(SafeFileHandle, String)

檢查 SafeFileHandle 所代表的文件系統物件是否具有符合指定 expectedPath 的正式路徑。

MoveFile(String, String)

移動指定的檔案至新的位置,提供指定新檔名的選項。 如果檔案標準路徑包含 Windows Reparse Points,則會擲回 UnauthorizedAccessException。

OpenFile(String, FileMode, FileAccess, FileShare)

在指定的路徑上開啟 System.IO.FileStream,具有具有讀取、寫入或讀取/寫入存取權的指定模式,以及指定的共享選項。 如果檔案標準路徑包含 Windows Reparse Points,則會擲回 UnauthorizedAccessException。 OpenFile 會先釘選目錄,再執行任何檔案作業。 如果釘選目錄失敗,或目錄是 ReparsePoint,則會擲回 UnauthorizedAccessException。

OpenRead(String)

開啟現有檔案來讀取。 如果檔案標準路徑包含 Windows Reparse Points,則會擲回 UnauthorizedAccessException。

OpenWrite(String)

開啟現有檔案或建立新檔案,以進行寫入。 如果檔案標準路徑包含 Windows Reparse Points,則會擲回 UnauthorizedAccessException。

PinAndRequireNoReparsePoints(String, Boolean)

將 SafeFileHandle 開啟至現有的檔案或目錄,並確認產生的標準路徑符合指定路徑的規範路徑。 產生的 SafeFileHandle 是 IDisposable,而且可以在 using 語句內使用,以確保後續的檔案作業會寫入路徑,而不需重新分析點。

PinHandle(String, Boolean)

取得現有檔案或目錄的句柄,以確保無法移動。

RequireNoReparsePoints(String, Boolean)

如果標準路徑與 expectedPath 不同,則會擲回 UnauthorizedAccessException。

RequireSamePath(SafeFileHandle, String)

如果指定的 SafeFileHandle 標準路徑與 expectedPath 不同,則會擲回 UnauthorizedAccessException。

SetFileAttributeNormal(String)

檢查是否可藉由設定 FileAttribute = Normal 來查看是否可以刪除檔案。 如果無法設定屬性,則用戶沒有訪問許可權

WriteAllText(String, String)

建立新檔案,將指定的字串寫入檔案,然後關閉檔案。 如果檔案已經存在,則會覆寫該檔案。 如果檔案標準路徑包含 Windows Reparse Points,則會擲回 UnauthorizedAccessException,而且不會寫入任何內容。

適用於