CA3077:API のデザイン、XML ドキュメント、および XML テキスト リーダーでの安全ではない処理
プロパティ | 値 |
---|---|
ルール ID | CA3077 |
Title | API のデザイン、XML ドキュメント、および XML テキスト リーダーでの安全ではない処理 |
[カテゴリ] | Security |
修正が中断か中断なしであるか | なし |
.NET 8 では既定で有効 | いいえ |
原因
XMLDocument と XMLTextReader から派生する API をデザインする場合、 DtdProcessingにご注意ください。 外部エンティティ ソースを参照または解決したり、XML に安全ではない値を設定したりする場合に、安全ではない DTDProcessing インスタンスを使用すると、情報漏えいにつながる可能性があります。
規則の説明
文書型定義 (DTD) は、World Wide Web コンソーシアム (W3C) Extensible Markup Language (XML) 1.0 で定義されているように、XML パーサーが文書の妥当性を判別する 2 つの方法のうちの 1 つです。 このルールは、信頼されていないデータを受け入れてしまうプロパティとインスタンスを検索し、 サービス拒否 (DoS) 攻撃につながる可能性がある潜在的な Information Disclosure の脅威について開発者に警告します。 このルールは、次の場合にトリガーされます。
XmlDocument または XmlTextReader クラスがリゾルバーの既定値を DTD の処理に使用している。
XmlDocument または XmlTextReader から派生したクラスにコンストラクターが定義されていない。または XmlResolverにセキュリティで保護された値が使用されていない。
違反の修正方法
パス情報の漏えいを防ぐために、XmlTextReader 例外をすべてキャッチし、適切に処理します。
XmlResolver の代わりに XmlSecureResolver を使用して、XmlTextReader がアクセスできるリソースを制限します。
どのようなときに警告を抑制するか
入力が信頼できるソースからのものとわかっているのでない限り、この警告からのルールを抑制しないでください。
警告を抑制する
単一の違反を抑制するだけの場合は、ソース ファイルにプリプロセッサ ディレクティブを追加して無効にしてから、規則をもう一度有効にします。
#pragma warning disable CA3077
// The code that's violating the rule is on this line.
#pragma warning restore CA3077
ファイル、フォルダー、またはプロジェクトの規則を無効にするには、構成ファイルでその重要度を none
に設定します。
[*.{cs,vb}]
dotnet_diagnostic.CA3077.severity = none
詳細については、「コード分析の警告を抑制する方法」を参照してください。
疑似コードの例
違反
using System;
using System.Xml;
namespace TestNamespace
{
class TestClass : XmlDocument
{
public TestClass () {} // warn
}
class TestClass2 : XmlTextReader
{
public TestClass2() // warn
{
}
}
}
解決策
using System;
using System.Xml;
namespace TestNamespace
{
class TestClass : XmlDocument
{
public TestClass ()
{
XmlResolver = null;
}
}
class TestClass2 : XmlTextReader
{
public TestClass2()
{
XmlResolver = null;
}
}
}
.NET