CA3061: не добавляйте схему по URL-адресу
Свойство | Значение |
---|---|
Идентификатор правила | CA3061 |
Заголовок | Не добавлять схему по URL-адресу |
Категория | Безопасность |
Исправление является критическим или не критическим | Не критическое |
Включен по умолчанию в .NET 9 | No |
Причина
Перегрузка метода XmlSchemaCollection.Add(String, String)
использует XmlUrlResolver
для указания внешней схемы XML в виде универсального кода ресурса (URI). Если строка URI испорчена, это может привести к синтаксическому анализу вредоносной схемы XML и риску включения бомб XML и вредоносных внешних сущностей. В результате злоумышленник сможет осуществить атаку типа "отказ в обслуживании", раскрытие информации или подделку запросов на стороне сервера.
Описание правила
Не используйте небезопасную перегрузку метода Add
, так как она может вызвать опасные внешние ссылки.
Устранение нарушений
- Не используйте
XmlSchemaCollection.Add(String, String)
.
Когда лучше отключить предупреждения
Отключите это правило, если вы уверены, что XML не разрешает опасные внешние ссылки.
Отключение предупреждений
Если вы просто хотите отключить одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить и повторно включить правило.
#pragma warning disable CA3061
// The code that's violating the rule is on this line.
#pragma warning restore CA3061
Чтобы отключить правило для файла, папки или проекта, задайте его серьезность none
в файле конфигурации.
[*.{cs,vb}]
dotnet_diagnostic.CA3061.severity = none
Дополнительные сведения см. в разделе Практическое руководство. Скрытие предупреждений анализа кода.
Примеры псевдокода
Нарушение
В приведенном ниже примере псевдокода показан шаблон, обнаруживаемый этим правилом.
Тип второго параметра — string
.
using System;
using System.Xml.Schema;
...
XmlSchemaCollection xsc = new XmlSchemaCollection();
xsc.Add("urn: bookstore - schema", "books.xsd");
Решение
using System;
using System.IO;
using System.Xml;
using System.Xml.Schema;
...
XmlSchemaCollection xsc = new XmlSchemaCollection();
xsc.Add("urn: bookstore - schema", new XmlTextReader(new FileStream(""xmlFilename"", FileMode.Open)));