Сканирование безопасности нашего источника на C # показало, что «отсутствует проверка XML» как возможный недостаток внедрения. Он цитировал https://cwe.mitre.org/data/definitions/112.html и другие источники.
Его рекомендация:
Всегда включайте проверку при синтаксическом анализе XML. Если включение проверки вызывает проблемы из-за того, что правила для определения правильно оформленного документа являются византийскими или вообще неизвестными, велика вероятность, что поблизости есть ошибки безопасности.
Пример. В следующем коде показано, как включить проверку при использовании XmlReader.XmlReader
Settings settings = new XmlReaderSettings();
settings.Schemas.Add(schema);
settings.ValidationType = ValidationType.Schema;
StringReader sr = new StringReader(xmlDoc);
XmlReader reader = XmlReader.Create(sr, settings);
У меня есть схема XSD, доступная для проверки. У меня вопрос, как мне загрузить XSD как XmlSchema без дублирования ошибки загрузки XML-файла без проверки?
Если я читаю XSD из файловой системы, я думаю, что я просто дублирую ту же ошибку(чтение XML без проверки). Есть ли рекомендуемый способ сделать это?
Нашим первым подходом было чтение XSD из файловой системы, например:
XmlTextReader xsdReader = new XmlTextReader("MySchema.xsd"));
XmlSchema schema = XmlSchema.Read(xsdReader, ValidationCallback);
Но я считаю, что это вызывает ту же ошибку, читая XML (в данном случае XSD)без проверки.
Подход, который мы используем сейчас (который, я думаю, пройдет проверку безопасности), заключается в загрузке XSD из встроенного ресурса.
Stream xsdStream = Assembly.GetAssembly(typeof(MyType))
.GetManifestResourceStream("MyNamespace.MySchema.xsd");
if (xsdStream == null) throw ...
XmlSchema schema = XmlSchema.Read(xsdStream, ValidationCallback);
Мы еще не отсканированы, но я подозреваю, что встроенный ресурсный подход пройдет. Но есть ли рекомендуемый или лучший подход к этому?