XMLスキーマ検証の欠落

C#でのXMLスキーマ検証の欠落

説明

信頼できないXMLをスキーマ検証なしで処理すると、アプリケーションが想定していない構造や値を受け入れるおそれがあります。セキュリティ境界では、XmlReaderSettings.ValidationType = ValidationType.None のように検証を明示的に無効にする設定を避けてください。

想定される影響

  • 不正なXMLが業務処理に渡され、権限チェックの回避、データの改ざん、例外によるサービス拒否につながるおそれがあります。

対処方法

信頼できるスキーマを登録し、ValidationType.Schema を使用してください。外部エンティティが不要な場合は、DtdProcessing.Prohibit と XmlResolver = null も設定してください。検証はreaderが文書を読み取る際に行われるため、最後まで読み取り、検証に失敗したデータを業務処理に渡さないでください。

例

変更前

csharp
var settings = new XmlReaderSettings
{
    ValidationType = ValidationType.None
};
using var reader = XmlReader.Create(stream, settings);

変更後

csharp
var settings = new XmlReaderSettings
{
    ValidationType = ValidationType.Schema,
    DtdProcessing = DtdProcessing.Prohibit,
    XmlResolver = null
};
settings.Schemas.Add("urn:example", "schema.xsd");
using var reader = XmlReader.Create(stream, settings);

解説:

  • 変更前: セキュリティ上重要なXMLをスキーマ検証なしで解析すると、不正なデータや想定外のデータがアプリケーションの処理に到達するおそれがあります。
  • 変更後: 信頼できないXMLを解析する前に、XmlReaderSettings に ValidationType.Schema と信頼できるスキーマ集合を設定してください。

参考資料