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);
}
.NET