У нас был аудит безопасности на нашем коде, и они отметили, что наш код уязвим для атаки внешнего окружения (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-адреса, которые могут разрешаться вне предполагаемого contronl. Обработчик сущности 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). Может ли кто-нибудь помочь, где я упускаю вещи? Любая помощь приветствуется!