CA5369:逆シリアル化に XmlReader を使用します
プロパティ | 値 |
---|---|
ルール ID | CA5369 |
Title | 逆シリアル化に XmlReader を使用します |
[カテゴリ] | Security |
修正が中断か中断なしであるか | なし |
.NET 8 では既定で有効 | いいえ |
原因
XmlReader
オブジェクトを使用せずにインスタンス化された XmlSerializer.Deserialize クラスを使用して信頼されていない 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 インライン スキーマ処理を無効にして使用することにより、この処理を制限する必要があります。 この規則では、XmlSerializer.Deserialize メソッドを使用し、XmlReader
をコンストラクター パラメーターとして受け取らないコードを検出します。
違反の修正方法
Deserialize(XmlReader)、Deserialize(XmlReader, String)、Deserialize(XmlReader, XmlDeserializationEvents)、または Deserialize(XmlReader, String, XmlDeserializationEvents) 以外の XmlSerializer.Deserialize オーバーロードを使用しないでください。
どのようなときに警告を抑制するか
解析される XML が信頼されているソースからであるため、改ざんの可能性がない場合、この警告を抑制できる可能性があります。
警告を抑制する
単一の違反を抑制するだけの場合は、ソース ファイルにプリプロセッサ ディレクティブを追加して無効にしてから、規則をもう一度有効にします。
#pragma warning disable CA5369
// The code that's violating the rule is on this line.
#pragma warning restore CA5369
ファイル、フォルダー、またはプロジェクトの規則を無効にするには、構成ファイルでその重要度を none
に設定します。
[*.{cs,vb}]
dotnet_diagnostic.CA5369.severity = none
詳細については、「コード分析の警告を抑制する方法」を参照してください。
疑似コードの例
違反
次の擬似コード サンプルでは、この規則により検出されたパターンを示しています。
XmlSerializer.Deserialize の最初のパラメーターの型が、XmlReader
またはその派生クラスではありません。
using System.IO;
using System.Xml.Serialization;
...
new XmlSerializer(typeof(TestClass).Deserialize(new FileStream("filename", FileMode.Open));
解決策
using System.IO;
using System.Xml;
using System.Xml.Serialization;
...
new XmlSerializer(typeof(TestClass)).Deserialize(XmlReader.Create (new FileStream("filename", FileMode.Open)));
.NET