コードのセキュリティ監査を行いましたが、コードは外部エンティティ(XXE)攻撃に対して脆弱であるとのことでした。私は次のコードを使用しています-
string OurOutputXMLString=
"<ce><input><transaction><length>00000</length><tran_type>Login</tran_type></transaction><user><user_id>ce_userid</user_id><subscriber_name>ce_subscribername</subscriber_name><subscriber_id>ce_subscriberid</subscriber_id><group_id>ce_groupid</group_id><permissions></permissions></user><consumer><login_details><username>UnitTester9</username><password>pDhE5AsKBHw85Sqgg6qdKQ==</password><pin>tOlkiae9epM=</pin></login_details></consumer></input></ce>"
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(OurOutputXMLString);
監査レポートでは、XMLエンティティに意図された制御の範囲外で解決できるURLが含まれている可能性があるため、失敗していると述べています。XMLエンティティリゾルバーは、外部参照の解決と取得を試みます。攻撃者が制御するXMLをこれらの機能のいずれかに送信できる場合、攻撃者は内部ネットワーク、ローカルファイルシステム、またはその他の機密データに関する情報にアクセスする可能性があります。これを回避するために、次のコードを記述しましたが、機能しません。
MemoryStream stream =
new MemoryStream(System.Text.Encoding.Default.GetBytes(OurOutputXMLString));
XmlReaderSettings settings = new XmlReaderSettings();
settings.DtdProcessing = DtdProcessing.Prohibit;
settings.MaxCharactersFromEntities = 6000;
XmlReader reader = XmlReader.Create(stream, settings);
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(reader);
しかし、ここでは、リーダーにロードする値がないことがわかりますxmlDoc(XmlDocument)
。誰かが私が物事を逃しているところを助けることができますか?