XML外部エンティティ(XXE)

C#のXML外部エンティティ

説明

信頼できないXMLでDTDの処理と外部リソースの解決を許可すると、外部エンティティを通じてローカルファイルを読み取られたり、サーバー側からリクエストを送信されたりするおそれがあります。DtdProcessing.Parse だけで常に外部アクセスが許可されるわけではなく、XmlResolver の設定も影響します。

想定される影響

  • ローカルファイルの漏えい、内部ネットワークへのリクエスト、サービス拒否。

対処方法

DTDの処理を禁止し、XmlResolver を null に設定してください。

例

変更前

csharp
var settings = new XmlReaderSettings {
    DtdProcessing = DtdProcessing.Parse,
    XmlResolver = new XmlUrlResolver()
};

変更後

csharp
var settings = new XmlReaderSettings {
    DtdProcessing = DtdProcessing.Prohibit,
    XmlResolver = null
};

解説:

  • 変更前: 外部エンティティを許可するパーサーは、ローカルファイルの漏えいやサーバー側からのリクエストにつながるおそれがあります。
  • 変更後: 信頼できないXMLを解析する前にDTDの処理を無効にし、XmlResolver を null に設定してください。

参考資料