Поделиться через


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)));