System.Xml.XmlReaderSettings クラス
この記事は、この API のリファレンス ドキュメントの補足説明です。
Create メソッドを使って XmlReader インスタンスを取得します。 このメソッドでは、XmlReaderSettings クラスを使って、作成する XmlReader オブジェクトに実装する機能を指定します。
準拠チェック、検証、その他の一般的なシナリオに使う設定については、XmlReader と Create のリファレンス ページのり「注釈」セクションを参照してください。 既定の設定の一覧については、XmlReaderSettings() コンストラクターの記事を参照してください。
セキュリティに関する考慮事項
XmlReaderSettings クラスを使う場合は、次の点を考慮してください。
ProcessInlineSchema オブジェクトの ProcessSchemaLocation および XmlReaderSettings の検証フラグは、既定では設定されていません。 これらのフラグが設定されていると、XmlResolver オブジェクトの XmlReaderSettings が XmlReader のインスタンス ドキュメント中に出現したスキーマの場所を解決するために使用されます。 XmlResolver オブジェクトが
null
の場合、ProcessInlineSchema と ProcessSchemaLocation の検証フラグが設定されていても、スキーマの場所は解決されません。検証を実行しているときにスキーマを追加すると新しい型が追加されるため、検証しているドキュメントの検証結果を変えることができます。 結果として、信頼できるソースからの外部スキーマだけが解決されるようにする必要があります。
検証エラー メッセージには、機密性の高いコンテンツ モデル情報が表示される可能性があります。 検証エラーと警告のメッセージは、ValidationEventHandler デリゲートを使って処理されます。または、XmlReaderSettings オブジェクトにイベント ハンドラーが提供されていない場合は、XmlSchemaValidationException として表示されます (検証の警告によって XmlSchemaValidationException がスローされることはありません)。 このコンテンツ モデル情報は、信頼されていないシナリオでは公開しないようにする必要があります。 検証の警告メッセージは既定では抑制されており、ReportValidationWarnings フラグを設定することで報告することができます。
XmlSchemaValidationException の SourceUri プロパティは、例外の原因となったスキーマ ファイルへの URI パスを返します。 SourceUri プロパティは、信頼されていないシナリオでは公開しないようにする必要があります。
高可用性のシナリオで、ドキュメントの大部分に ID 制約があるスキーマに対して、信頼できない大規模な XML ドキュメントを検証する場合は、ProcessIdentityConstraints フラグ (既定で有効) を無効にすることをお勧めします。
XmlReaderSettings オブジェクトはユーザー資格情報など、重要な情報を含むことがあります。 XmlReaderSettings オブジェクトをキャッシュしたり、XmlReaderSettings オブジェクトをあるコンポーネントから別のコンポーネントに渡したりする場合には注意が必要です。
既定で DTD の処理は無効になっています。 DTD 処理を有効にする場合は、信頼できないソースからの DTD が含まれていることと、サービス拒否攻撃の可能性があることに注意する必要があります。 XmlSecureResolver を使って、XmlReader がアクセスできるリソースを制限します。
信頼できないソースからの NameTable、XmlNamespaceManager、および XmlResolver オブジェクトなどのサポート コンポーネントは受け入れないようにします。
XmlReader を使用するアプリケーションのメモリ使用量が、解析済み XML ドキュメントのサイズに相関する場合があります。 非常に大きな XML ドキュメントを送信して解析させることは、サービス拒否攻撃 (DoS) の一種です。 MaxCharactersInDocument プロパティを設定することで解析できるドキュメントのサイズを制限してから、MaxCharactersFromEntities プロパティを設定することでエンティティを展開した結果の文字数を制限することができます。
.NET