CA5372:XPathDocument に XmlReader を使用します

プロパティ
ルール ID CA5372
Title XPathDocument に XmlReader を使用します
[カテゴリ] Security
修正が中断か中断なしであるか なし
.NET 8 では既定で有効 いいえ

原因

XmlReader オブジェクトを使用せずにインスタンス化された XPathDocument クラスを使用すると、サービス拒否、情報漏えい、サーバー側のリクエスト フォージェリ攻撃につながる可能性があります。 これらの攻撃は、XML に XML 爆弾や悪意のある外部エンティティを含めることができる、信頼されていない DTD および XML スキーマ処理によって有効になります。 XmlReader を使用する場合のみ、DTD を無効にすることができます。 XmlReader としてのインライン XML スキーマ処理では、.NET Framework バージョン 4.0 以降、既定で ProhibitDtd および ProcessInlineSchema プロパティが false に設定されます。 StreamTextReaderXmlSerializationReader などのその他のオプションでは、DTD 処理を無効にできません。

規則の説明

信頼されていないデータから XML を処理すると、危険な外部参照を読み込む可能性があります。XmlReader を安全なリゾルバーと共に使用するか、DTD 処理を無効にして使用することにより、この処理を制限できます。 この規則では、XPathDocument クラスを使用し、XmlReader をコンストラクター パラメーターとして受け取らないコードを検出します。

違反の修正方法

XPathDocument(XmlReader, *) コンストラクターを使用します。

どのようなときに警告を抑制するか

信頼されているソースからであるため、改ざんの可能性がない XML ファイルを処理するために XPathDocument オブジェクトが使用される場合、この警告を抑制できる可能性があります。

警告を抑制する

単一の違反を抑制するだけの場合は、ソース ファイルにプリプロセッサ ディレクティブを追加して無効にしてから、規則をもう一度有効にします。

#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);
}