CA5371:スキーマの読み取りに XmlReader を使用します
プロパティ | 値 |
---|---|
ルール ID | CA5371 |
Title | スキーマの読み取りに XmlReader を使用します |
[カテゴリ] | Security |
修正が中断か中断なしであるか | なし |
.NET 8 では既定で有効 | いいえ |
原因
XmlReader
オブジェクトを使用せずにインスタンス化された XmlSchema.Read クラスを使用して信頼されていない XML 入力を処理すると、サービス拒否、情報漏えい、サーバー側のリクエスト フォージェリ攻撃につながる可能性があります。 これらの攻撃は、XML に XML 爆弾や悪意のある外部エンティティを含めることができる、信頼されていない DTD および XML スキーマ処理によって有効になります。 XmlReader
を使用する場合のみ、DTD を無効にすることができます。 XmlReader
としてのインライン XML スキーマ処理では、.NET Framework バージョン 4.0 以降、既定で ProhibitDtd
および ProcessInlineSchema
プロパティが false に設定されます。 Stream
、TextReader
、XmlSerializationReader
などのその他のオプションでは、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);
}
.NET