C # проверка XML с XSD без загрузки неподтвержденного XSD? - PullRequest
3 голосов
/ 30 октября 2019

Сканирование безопасности нашего источника на 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);   

Мы еще не отсканированы, но я подозреваю, что встроенный ресурсный подход пройдет. Но есть ли рекомендуемый или лучший подход к этому?

1 Ответ

1 голос
/ 31 октября 2019

Любой, кто может написать фразу «Если включение проверки вызывает проблемы, потому что правила для определения правильно оформленного документа являются византийскими», обнаруживает, что он очень мало знает об XML;кажется, они не понимают разницы между тем, чтобы быть действительным и быть хорошо сформированным, что является довольно фундаментальным. Таким образом, вы должны найти способы обойти правила, которые не очень умны. На этом этапе вы должны решить, является ли ваша цель сделать систему более безопасной или пройти тесты безопасности.

Очень трудно увидеть, какие уязвимости безопасности будут устранены путем включения проверки.

Тем более, что вы можете написать схему, которая принимает любой документ как действительный, и я уверен, что ваш инструмент безопасности будет рад, что вы будете соблюдать правила, даже если вы не повысили уровень безопасности ни на йоту.

Когдаобработчик схемы загружает схему, а затем автоматически проверяет, является ли она действительной схемой. Так что на самом деле нет никакого риска. Но то, принимает ли ваш сканер безопасности отсутствие риска, - это совсем другое дело.

...