Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
| Свойство | Значение |
|---|---|
| Идентификатор правила | CA3061 |
| Заголовок | Не добавлять схему через URL-адрес |
| Категория | Безопасность |
| Исправление является критическим или не критическим | неразрывный |
| Включен по умолчанию в .NET 10 | Нет |
| Применимые языки | C# и Visual Basic |
Причина
Перегрузка метода 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)));