私は仕事のセキュリティ デモンストレーションとしてまとめようとしています。なぜ DTD エンティティ処理が危険なのか、そしてなぜそれを防ぎたいのかを示したいと思っています。私はそれをより広い意味で機能させようとしていますが、ここに私が苦労しているコードがあります。
String str = "<?xml version=\"1.0\"?><!DOCTYPE foo [<!ELEMENT foo ANY> <!ENTITY xxe SYSTEM \"http://www.google.com\" >]><root>&xxe;</root>";
String encoded = System.Web.HttpUtility.UrlEncode(str);
System.Xml.XmlDocument xDoc = new System.Xml.XmlDocument();
xDoc.LoadXml(str)
問題は、xml ドキュメントをロードするたびに、DOCTYPE トークンが予期されていないという例外が発生することです。LoadXml を使用して C# で DTD をロードできるようにし、エンティティ展開を使用して DTD を解析するにはどうすればよいですか? 例外なく?