次の方法で共有


CA5366: DataSet Read XML に XmlReader を使用します

プロパティ
ルール ID CA5366
Title DataSet Read XML に XmlReader を使用します
[カテゴリ] Security
修正が中断か中断なしであるか なし
.NET 8 では既定で有効 いいえ

原因

ドキュメント型定義 (DTD) は、XML ドキュメントの構造、法的要素、および属性を定義します。 外部リソースから DTD を参照すると、サービス拒否 (DoS) 攻撃を受ける可能性があります。 ほとんどのリーダーは、DTD 処理を無効にしたり、System.Xml.XmlReader 以外の外部参照の読み込みを制限したりすることはできません。 これらの他のリーダーを使用し、次のいずれかの方法で XML を読み込むと、この規則がトリガーされます。

規則の説明

System.Data.DataSet を使用して信頼されていないデータを含んだ XML を読み取ると、危険な外部参照が読み込まれる可能性があります。XmlReader を安全なリゾルバーと共に使用するか、DTD 処理を無効にして使用することにより、この処理を制限する必要があります。

違反の修正方法

XmlReader またはその派生クラスを使用して XML を読み取ります。

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

信頼されたデータ ソースを扱う場合は、この規則による警告を抑制します。

警告を抑制する

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

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

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

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

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

疑似コードの例

違反

using System.Data;
using System.IO;

public class ExampleClass
{
    public void ExampleMethod()
    {
        new DataSet().ReadXml(new FileStream("xmlFilename", FileMode.Open));
    }
}

解決策

using System.Data;
using System.IO;
using System.Xml;

public class ExampleClass
{
    public void ExampleMethod()
    {
        new DataSet().ReadXml(new XmlTextReader(new FileStream("xmlFilename", FileMode.Open)));
    }
}