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 に設定されます。 Stream
、TextReader
、XmlSerializationReader
などのその他のオプションでは、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);
}
.NET