• Microsoft .NET
  • WPF и Silverlight
  • Элементы управления пользовательского интерфейса Silverlight (User Interface Controls)

Безопасность в Silverlight 2 - Правила наследования

ОГЛАВЛЕНИЕ


Правила наследования

Для эффективной работы модели прозрачности необходимо убедиться в том, что замыкание типа или метода безопасно так же, как и сам тип или метод. Если в результате наследования дочерние типы и методы получают права доступа к ресурсам, отличающиеся от прав доступа базовых типов и методов, то защита доступа к ресурсам может быть нарушена. Особенно опасна ситуация, когда унаследованный тип, имеющий ограниченные права доступа к ресурсам, преобразуется к базовому типу или интерфейсу с более широкими правами доступа. Представьте себе, что прозрачный виртуальный метод переопределяется методом с ключевым кодом, а для предотвращения вызов переопределенного метода из прозрачного кода выполняется преобразование к Object.ToString.

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

Переопределение виртуальных методов подчиняется другому правилу: из прозрачного кода производный метод должен иметь те же права доступа, что и базовый метод. На рис. 2 показано, какое наследование допускается в соответствии с этим правилом.

В заключение можно сказать, что в модели прозрачности Silverlight любой код по умолчанию считается прозрачным. Все приложения Silverlight совершенно прозрачны. Игнорируюся любые пометки, указывающие на обратное. Кроме того, наличие предопределенного набора прав означает, что единственным необходимым для CoreCLR механизмом является механизм прозрачности. На рис. 3 приведены все три категории кода, их свойства и возможности.

Рис. 3. Сравнение прозрачного, безопасного ключевого и ключевого кода