Chúng tôi đã kiểm tra bảo mật trên mã của chúng tôi và họ đã đề cập rằng mã của chúng tôi dễ bị tấn công EXternal Entity (XXE). Tôi đang sử dụng mã sau -Làm thế nào để ngăn chặn tấn công XXE (XmlDocument in .net)
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);
Trong báo cáo kiểm tra, họ nói rằng nó không thành công vì thực thể XML có thể chứa URL có thể giải quyết ngoài ngữ cảnh dự định. Trình phân giải đối tượng XML sẽ cố gắng giải quyết và truy xuất các tham chiếu bên ngoài. Nếu XML được kiểm soát bởi kẻ tấn công có thể được gửi đến một trong các chức năng này, thì kẻ tấn công có thể truy cập thông tin về mạng nội bộ, hệ thống tệp cục bộ hoặc các dữ liệu nhạy cảm khác. Để tránh điều này tôi đã viết đoạn mã sau nhưng nó không hoạt động.
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);
nhưng tôi có thể thấy ở đây người đọc không có bất kỳ giá trị nào để tải vào xmlDoc (XmlDocument). Bất cứ ai có thể giúp đỡ nơi tôi đang thiếu những thứ? Bất kỳ trợ giúp nào được đánh giá cao!
Nếu bạn chắc chắn rằng bạn sẽ không sử dụng tài nguyên bên ngoài, bạn có thể kiểm soát thông tin đăng nhập mà XMLResolver của XmlDocument sử dụng. Xem http://msdn.microsoft.com/en-us/library/system.xml.xmldocument.xmlresolver.aspx để biết ví dụ. Trong trường hợp này, bạn có thể đặt thông tin đăng nhập của XmlResolver vào tài khoản chỉ có quyền truy cập giới hạn, vì vậy mọi nỗ lực truy xuất tài nguyên đều có thể được kiểm soát thông qua quyền NT. – dash
Trong thực tế, đây là một bài viết MSDN rất hữu ích mà địa chỉ câu hỏi của bạn: http://msdn.microsoft.com/en-us/magazine/ee335713.aspx – dash