CA3077:API 設計、XML 文件和 XML 文字讀取器中的不安全處理
屬性 | 值 |
---|---|
規則識別碼 | CA3077 |
標題 | API 設計、XML 文件和 XML 文字讀取器中的不安全處理 |
類別 | 安全性 |
修正程式是中斷或非中斷 | 不中斷 |
預設在 .NET 8 中啟用 | No |
原因
針對衍生自 XMLDocument 和 XMLTextReader 的 API 進行設計時,請留意 DtdProcessing。 若在參考或解析外部實體來源時使用不安全的 DTDProcessing 執行個體,或在 XML 中設定不安全的值,都可能會導致資訊洩漏。
檔案描述
文件類型定義 (DTD) 是 World Wide Web Consortium (W3C) Extensible Markup Language (XML) 1.0中針對 XML 剖析器用來判斷文件有效性所定義之兩種方式的其中一種。 此規則會搜尋已接受不受信任之資料的屬性和執行個體,藉此警告開發人員潛在的 Information Disclosure 威脅,這些威脅可能會導致 Denial of Service (DoS) 攻擊。 下列情況會觸發此規則:
XmlDocument 或 XmlTextReader 類別會使用預設解析程式值來處理 DTD 。
未針對 XmlDocument 或 XmlTextReader 衍生的類別定義任何建構函式,或在 XmlResolver中使用不安全的值。
如何修正違規
攔截並處理所有 XmlTextReader 例外狀況,以避免路徑資訊洩漏 。
使用 XmlSecureResolver而不是 XmlResolver 來限制 XmlTextReader 可以存取的資源。
隱藏警告的時機
如果您無法確定輸入是否來自受信任的來源,請不要隱藏這個警告的規則。
隱藏警告
如果您只想要隱藏單一違規,請將預處理器指示詞新增至原始程式檔以停用,然後重新啟用規則。
#pragma warning disable CA3077
// The code that's violating the rule is on this line.
#pragma warning restore CA3077
若要停用檔案、資料夾或項目的規則,請在組態檔中將其嚴重性設定為 。none
[*.{cs,vb}]
dotnet_diagnostic.CA3077.severity = none
如需詳細資訊,請參閱 如何隱藏程式代碼分析警告。
虛擬程式代碼範例
違規
using System;
using System.Xml;
namespace TestNamespace
{
class TestClass : XmlDocument
{
public TestClass () {} // warn
}
class TestClass2 : XmlTextReader
{
public TestClass2() // warn
{
}
}
}
解決方案
using System;
using System.Xml;
namespace TestNamespace
{
class TestClass : XmlDocument
{
public TestClass ()
{
XmlResolver = null;
}
}
class TestClass2 : XmlTextReader
{
public TestClass2()
{
XmlResolver = null;
}
}
}