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


CA2109: проверьте видимые обработчики событий

TypeName

ReviewVisibleEventHandlers

CheckId

CA2109

Категория

Microsoft.Security

Критическое изменение

Критическое изменение

Причина

Обнаружен открытый или защищенный метод обработки событий.

Описание правила

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

Методы обработки событий следует раскрывать только в тех случаях, когда это совершенно необходимо. Обработчик событий (тип делегата), вызывающий раскрытый метод, можно добавить к любому событию при совпадении сигнатур обработчика и события. События могут возникнуть в любом коде, они часто применяются в высоконадежном системном коде в ответ на действия пользователей, такие как нажатие кнопок. Добавление проверки безопасности к методу обработки событий не воспретит коду зарегистрировать обработчик событий, вызывающий метод.

Запрос не может надежно защитить метод, вызываемый обработчиком событий. Запросы безопасности помогают защитить код от ненадежных вызывающих объектов путем проверки вызывающих объектов в стеке вызова. Код, добавляющий обработчик событий к событию, не обязательно должен находиться в стеке вызова при выполнении методов обработчика событий. Поэтому в стеке вызова при вызове метода обработки событий могут находиться только высоконадежные вызывающие объекты. Из-за этого запросы, сделанные методом обработчика событий, успешно выполняются. Кроме того, запрошенное разрешение может быть подтверждено при вызове метода. Вследствие этого для оценки риска, возникающего при нарушении это правила, требуется проверить метод обработки событий. При проверке кода обратите внимание на следующие моменты:

  • Выполняет ли обработчик событий какие-либо операции, являющиеся опасными или уязвимыми, например подтверждение разрешений или подавление разрешений неуправляемого кода?

  • Каковы угрозы безопасности, направленные на ваш код и из него вследствие того, что он может быть запущен в любое время при наличии в стеке только высоконадежных вызывающих объектов?

Устранение нарушений

Чтобы устранить нарушение этого правила, проверьте метод и рассмотрите следующие возможности:

  • Можно ли сделать метод обработки событий неоткрытым?

  • Можно ли переместить все опасные функции за пределы обработчика событий?

  • Если накладывается запрос безопасности, можно ли его выполнить как-либо иначе?

Отключение предупреждений

Предупреждения этого правила можно отключать только после тщательной проверки безопасности, убедившись в отсутствии уязвимостей и угроз.

Пример

В следующем примере показан метод обработки событий, который может быть злонамеренно использован вредоносным кодом.

using System;
using System.Security;
using System.Security.Permissions;

namespace EventSecLibrary
{
   public class HandleEvents
   {
      // Due to the access level and signature, a malicious caller could 
      // add this method to system-triggered events where all code in the call
      // stack has the demanded permission.

      // Also, the demand might be canceled by an asserted permission.

      [SecurityPermissionAttribute(SecurityAction.Demand, UnmanagedCode=true)]

      // Violates rule: ReviewVisibleEventHandlers.
      public static void SomeActionHappened(Object sender, EventArgs e)
      {
         Console.WriteLine ("Do something dangerous from unmanaged code.");
      }

   }
}

См. также

Ссылки

CodeAccessPermission.Demand

System.EventArgs

Основные понятия

Требования безопасности