우리는 우리의 코드에 보안 감사가 있고, 그들은 우리의 코드가 외부 엔티티 (결선도) 공격에 취약 언급을 방지하는 방법. 감사 보고서에서결선도 공격 (.NET에서을 XmlDocument)
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 엔티티가 외부 구성 contronl의 해결할 수있는 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)에로드 할 값이 없음을 알 수 있습니다. 내가 누락 된 부분을 도와 줄 사람이 있습니까? 누구나 도움을 주실 수 있습니다!
외부 리소스를 사용하지 않을 것이라 확신하는 경우 XmlDocument의 XMLResolver가 사용하는 자격 증명을 제어 할 수 있습니다. 예제는 http://msdn.microsoft.com/en-us/library/system.xml.xmldocument.xmlresolver.aspx를 참조하십시오. 이 경우 XmlResolver의 자격 증명을 제한된 액세스 권한을 가진 계정으로 설정할 수 있으므로 리소스를 검색하려는 모든 시도는 NT 권한을 통해 제어 할 수 있습니다. – dash
사실, 다음은 질문에 대답하는 매우 유용한 MSDN 문서입니다. http://msdn.microsoft.com/en-us/magazine/ee335713.aspx – dash