共用方式為


CA5372:請為 XPathDocument 使用 XmlReader

屬性
規則識別碼 CA5372
職稱 請為 XPathDocument 使用 XmlReader
類別 安全性
修正程式是中斷或非中斷 不中斷
預設在 .NET 9 中啟用 No

原因

XPathDocument在沒有 對象的情況下XmlReader具現化的 類別,可能會導致阻斷服務、資訊洩漏和伺服器端要求偽造攻擊。 這些攻擊是由不受信任的 DTD 和 XML 架構處理所啟用,可允許在 XML 中包含 XML 炸彈和惡意外部實體。 只有 , XmlReader 才能停用 DTD。 從 4.0 版開始,內嵌 XML 架構處理和 XmlReader ProhibitDtd ProcessInlineSchema 屬性預設在 .NET Framework 中設定為 false。 其他選項,例如 StreamTextReaderXmlSerializationReader 無法停用 DTD 處理。

檔案描述

從不受信任的數據處理 XML 可能會載入危險的外部參考,這可以透過搭配安全解析程式使用 XmlReader 或停用 DTD 處理來限制。 此規則會偵測使用 XPathDocument 類別的程式代碼,而且不會採用 XmlReader 作為建構函式參數。

如何修正違規

使用 XPathDocument(XmlReader, *) 建構函式。

隱藏警告的時機

如果 XPathDocument 對像是用來處理來自受信任來源的 XML 檔案,因此無法遭到竄改,則可能會隱藏此警告。

隱藏警告

如果您只想要隱藏單一違規,請將預處理器指示詞新增至原始程式檔以停用,然後重新啟用規則。

#pragma warning disable CA5372
// The code that's violating the rule is on this line.
#pragma warning restore CA5372

若要停用檔案、資料夾或項目的規則,請在組態檔中將其嚴重性設定為 。none

[*.{cs,vb}]
dotnet_diagnostic.CA5372.severity = none

如需詳細資訊,請參閱 如何隱藏程式代碼分析警告

虛擬程式代碼範例

違規

下列虛擬程式代碼範例說明此規則偵測到的模式。 的第一個參數 XPathDocument 類型不是 XmlReader

using System.IO;
using System.Xml.XPath;
...
var obj = new XPathDocument(stream);

解決方案

using System.Xml;
using System.Xml.XPath;
...
public void TestMethod(XmlReader reader)
{
var obj = new XPathDocument(reader);
}