1. All_Code: This code group grants no permissions and forms the root of the code group tree.
1.1. My_Computer_Zone: This code group grants full trust to all code originating on the local machine.
1.2. Local.Intranet_Zone: This code group grants the intranet permission set to code from the intranet zone. This permission set grants intranet code the right to use isolated storage, full UI access, some capability to do reflection and limited access to environment variables.
1.2.1. Intranet_Same_Site_Access: All intranet Code gets the right to connect back to the site of its origine.
1.2.2. Intranet_Same_Directory_Access: All intranet code gets the right to read from its install directory.
1.3. Internet_Zone: This code group grants code from the Internet zone the Internet permission set. This permission set grants Internet code the right the use isolated storage an a limited UI access.
1.3.1. Internet_Same_Site_Access: All Internet Code gets the right to connect back to the site of its origin.
1.4. Restricted_Zone: Code coming from a restricted zone does not receive any permissions.
1.5. Trusted_Zone: Code from a trusted zone is granted the Internet permission set. This permission set grants the right the use isolated storage and limited UI access.
1.5.1. Trusted_Same_Site_Access: All Trusted Code gets the right to connect back to the site of its origin.
1.6. Microsoft_Strong_Name: This code group grants code signed with the Microsoft strong name full trust.
1.7. Standards_Strong_Name: This code group grants code signed with the Standards strong name full trust.
Success
Подсистема
безопасности .NET следит, чтобы коду из каждой группы разрешалось делать только определенные вещи. Например, код из зоны Интернета будет, по умолчанию, иметь значительно более строгие ограничения, чем код с локального диска. Коду с локального диска обычно предоставляется доступ к данным на локальном диске, но сборкам из Интернета по умолчанию это полномочие не предоставляется.
Используя утилиту caspol и ее эквивалент в панели управления Microsoft, можно определить, какой уровень доверия мы имеем для каждой группы доступа к коду, а для группы управляющего кода рассмотреть полномочия более детальным образом.
Давайте еще раз взглянем на группы доступа к коду, но в более обобщенном виде. Зарегистрируйтесь в системе как локальный администратор, откройте командную строку и введите команду:
caspol.exe -listgroups
Появится вывод:
Microsoft (R) .NET Framework CasPol 1.0.xxxx.x
Copyright (c) Microsoft Corp 1999-2001. All rights reserved.
Security is ON
Execution checking is ON
Policy change prompt is ON
Level = Machine
Code Groups:
1. All code: Nothing
1.1. Zone - My Computer: FullTrust
1.2. Zone - Intranet: FullTrust
1.2.1. All code: Same site Socket and Web.
1.2.2. All code: Same directory FileIO — Read, PathDiscovery
. Позже в этой главе мы увидим, что это может быть выключено и снова включено.
Настройка
ExecutionChecking
задается включенной по умолчанию, это означает, что всем сборкам должно быть предоставлено разрешение выполнения, прежде чем они смогут выполниться. Если проверка выполнения выключена с помощью
caspol
(
caspol.exe -execution on|off
), то сборки, которые не имеют полномочий на выполнение, смогут реализоваться, хотя они способны вызвать исключения системы безопасности, если попытаются действовать вопреки политике безопасности в ходе этого выполнения.
Параметр
Policy change prompt
определяет, будет ли появляться предупреждающее сообщение "
Are you sure
" при попытке изменить политику безопасности.
Когда код разбит на группы, можно управлять системой безопасности на более детальном уровне и применять full trust (полное доверие) к значительно меньшей части кода. Отметим, что каждая группа имеет свою метку (такую, как "1.2"). Эти метки генерируются автоматически .NET и могут различаться на разных машинах. Обычно безопасность не контролируется для каждой сборки, она применяется на уровне группы кода.