| プロパティ | 値 |
|---|---|
| ルール ID | CA5369 |
| Title | 逆シリアル化に XmlReader を使用します |
| [カテゴリ] | Security |
| 修正が中断か中断なしであるか | なし |
| .NET 10 で既定で有効 | いいえ |
原因
XmlSerializer.Deserialize オブジェクトを使用せずにインスタンス化された XmlReader クラスを使用して信頼されていない 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 をコンストラクター パラメーターとして受け取らないコードを検出します。
違反の修正方法
XmlSerializer.Deserialize、Deserialize(XmlReader)、Deserialize(XmlReader, String)、または Deserialize(XmlReader, XmlDeserializationEvents) 以外の Deserialize(XmlReader, String, XmlDeserializationEvents) オーバーロードを使用しないでください。
どのようなときに警告を抑制するか
解析される 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