Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
| Свойство | Значение |
|---|---|
| Идентификатор правила | CA3077 |
| Заголовок | Небезопасная обработка при проектировании API, работе с документами XML и при чтении текста XML. |
| Категория | Безопасность |
| Исправление является разрушающим или неразрушающим | Неразрывный |
| Включен по умолчанию в .NET 10 | Нет |
| Применимые языки | C# и Visual Basic |
Причина
При разработке API, производных от XMLDocument и XMLTextReader, обратите внимание на DtdProcessing. Использование небезопасных экземпляров DTDProcessing при ссылке на источники внешних сущностей или их разрешении, а также при задании небезопасных значений в XML может привести к раскрытию информации.
Описание правила
DTD — это один из двух способов определения допустимости документа средством синтаксического анализа XML, как указано в стандарте XML 1.0 консорциума W3C. Это правило ищет свойства и экземпляры, в которых принимаются недоверенные данные, для предупреждения разработчиков о возможных угрозах Information Disclosure , которые могут привести к атакам типа отказ в обслуживании (DoS) . Это правило активируется, если:
классы XmlDocument и XmlTextReader используют значения сопоставителя по умолчанию для обработки DTD;
конструктор для производных классов XmlDocument или XmlTextReader не определен либо для XmlResolverне используется безопасное значение.
Устранение нарушений
Перехватывайте и обрабатывайте все исключения XmlTextReader соответствующим образом, чтобы не допустить раскрытия информации.
Используйте XmlSecureResolver вместо XmlResolver, чтобы ограничить доступ к ресурсам для XmlTextReader.
Когда лучше отключить предупреждения
Отключайте правило этого предупреждения, только если уверены, что входные данные получены из доверенного источника.
Отключение предупреждений
Если вы просто хотите отключить одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить и повторно включить правило.
#pragma warning disable CA3077
// The code that's violating the rule is on this line.
#pragma warning restore CA3077
Чтобы отключить правило для файла, папки или проекта, задайте его серьезность none в файле конфигурации.
[*.{cs,vb}]
dotnet_diagnostic.CA3077.severity = none
Дополнительные сведения см. в разделе Практическое руководство. Скрытие предупреждений анализа кода.
Примеры псевдокода
Нарушение
using System;
using System.Xml;
namespace TestNamespace
{
class TestClass : XmlDocument
{
public TestClass () {} // warn
}
class TestClass2 : XmlTextReader
{
public TestClass2() // warn
{
}
}
}
Решение
using System;
using System.Xml;
namespace TestNamespace
{
class TestClass : XmlDocument
{
public TestClass ()
{
XmlResolver = null;
}
}
class TestClass2 : XmlTextReader
{
public TestClass2()
{
XmlResolver = null;
}
}
}