Иллюстрированный самоучитель по Architecture .NET

Личность в операционной системе и общеязыковой среде выполнения CLR. Разрешения коду на доступ.

Как уже говорилось в начале этой главы, защита .NET строится поверх системы защиты операционной системы компьютера. Личность, связываемая с потоком при помощи общеязыковой среды выполнения CLR, и личность, связываемая с потоком при помощи операционной системы – это не одно и то же. В операционной системе личность потока представлена значением объекта Windows Identity, возвращаемого статическим методом Windowsldentity::GetCurrent. Ну, а личность в общеязыковой среде выполнения CLR представлена значением объекта Thread::CurrentPrincipal. Если вернуться к примеру, о котором говорилось в начале этой главы, то личности, как управляемые, так и неуправляемые, при доступе к файлу из.NET должны иметь на него права внутри соответствующих сред.

Значения текущего Windowsldentity и текущего Thread::CurrentPrincipal задаются в двух разных местах: это параметры информационного сервера Internet (IIS) и конфигурационные файлы ASP.NET.

Разрешения коду на доступ

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

Вот некоторые примеры разрешений коду на доступ:

  • DNSPermission управляет доступом к имеющимся в сети серверам доменных имен;
  • EnvironmentPermission управляет доступом на чтение или запись переменных среды;
  • FilelOPermission управляет доступом к файлам и каталогам;
  • FileDialogPermission позволяет читать файлы, выбранные в диалоговом окне Open (Открыть). Полезно тогда, когда FilelOPermission не предоставлено;
  • ReflectionPermission управляет возможностями получения доступа к метаданным, не являющимся общедоступными, и способностью порождать метаданные,
  • RegistryPermission управляет возможностью получать доступ к системному реестру и изменять его,
  • SecurityPermission управляет использованием подсистемы защиты,
  • SocketPermission управляет возможностью устанавливать соединения или принимать их по транспортному адресу;
  • UlPPermission управляет пользователями различных средств пользовательского интерфейса, в том числе и буферами обмена;
  • WebPermission управляет возможностью устанавливать соединения или принимать их по Web-адресу.

Использование этих разрешений называется защитой доступа для кода (Code Access Security), потому что в их основе лежит не личность пользователя, выполняющего код, а то, имеет ли сам код право предпринять некоторое действие.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.