CA5370:読み取りの検証に XmlReader を使用します

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

原因

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

規則の説明

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

違反の修正方法

  • ProhibitDtd プロパティと ProcessInlineSchema プロパティを false に設定して XmlValidatingReader(XmlReader) を使用します。
  • .NET Framework 2.0 以降、XmlValidatingReader は廃止と見なされます。 検証リーダーは XmlReader.Create を使用してインスタンス化できます。

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

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

警告を抑制する

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

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

ファイル、フォルダー、またはプロジェクトの規則を無効にするには、構成ファイルでその重要度を none に設定します。

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

詳細については、「コード分析の警告を抑制する方法」を参照してください。

疑似コードの例

違反

次の擬似コード サンプルでは、この規則により検出されたパターンを示しています。 XmlValidatingReader.XmlValidatingReader() の最初のパラメーターの型が XmlReader ではありません。

using System;
using System.IO;
using System.Xml;
...
public void TestMethod(Stream xmlFragment, XmlNodeType fragType, XmlParserContext context)
{
    var obj = new XmlValidatingReader(xmlFragment, fragType, context);
}

解決策

using System;
using System.Xml;
...
public void TestMethod(XmlReader xmlReader)
{
    var obj = new XmlValidatingReader(xmlReader);
}