次の方法で共有


CA5371:スキーマの読み取りに XmlReader を使用します

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

原因

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

規則の説明

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

違反の修正方法

XmlSchema.Read(XmlReader, *) オーバーロードを使用します。

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

信頼されているソースからであるため、改ざんの可能性がない XML ファイルを処理するために XmlSchema.Read メソッドが常に使用される場合、この警告を抑制できる可能性があります。

警告を抑制する

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

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

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

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

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

疑似コードの例

違反

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

using System.IO;
using System.Xml.Schema;
...
public void TestMethod(Stream stream, ValidationEventHandler validationEventHandler)
{
    XmlSchema.Read(stream, validationEventHandler);
}

解決策

using System.IO;
using System.Xml.Schema;
...
public void TestMethod(XmlReader reader, ValidationEventHandler validationEventHandler)
{
    XmlSchema.Read(reader, validationEventHandler);
}