Уровни доверия и файлы политик ASP.NET
Обновлен: Ноябрь 2007
Уровни доверия связываются с файлами политик с помощью элемента конфигурации <securityPolicy>, который действителен только в файле конфигурации на уровне веб-узла (Web.config). Уровни доверия можно добавлять или удалять, внося в раздел конфигурации новые записи, которые позволяют указать имя уровня доверия и используемый файл политики. По умолчанию файлы уровня доверия устанавливаются в каталог Сonfig в папку, содержащую файл Aspnet_isapi.dll. Там же хранится файл конфигурации Machine.config и файл политики безопасности времени выполнения.
Уровень доверия Full представляет особый случай. Поскольку он равнозначен полному доверию в зоне локального компьютера, ведущее приложение ASP.NET не применяет дополнительной политики к использующим его приложениям. Соответственно, уровень доверия Full отображается на внутренний обработчик, и платформа ASP.NET не добавляет дополнительную политику в домен приложения для приложений с полным доверием.
В приведенном ниже примере показан раздел securityPolicy файла конфигурации, отображающий уровни доверия на различные файлы политик.
<system.web>
<securityPolicy>
<trustLevel name="Full" policyFile="internal"/>
<trustLevel name="High" policyFile="web_hightrust.config"/>
<trustLevel name="Medium" policyFile="web_mediumtrust.config"/>
<trustLevel name="Low" policyFile="web_lowtrust.config"/>
<trustLevel name="Minimal" policyFile="web_minimaltrust.config"/>
</securityPolicy>
</system.web>
Если приложениям не следует давать возможность указывать собственный уровень доверия, можно использовать директиву <location> и задать для атрибута allowOverride значение false. Возможно, это потребуется сделать насервере, на котором размещено несколько приложений, в ситуации, когда требуется ограничить уровень доверия размещаемых приложений.
Изменение файлов уровня доверия
Можно изменять файлы политик или создавать новые файлы политик, содержащие пользовательские наборами разрешений. Например, можно скопировать содержимое файла Web_hightrust.config и добавить разрешение на создание соединений OLEDB, сперва добавив класс OleDbPermission в раздел SecurityClasses файла политики, как показано в приведенном ниже примере кода.
<SecurityClass Name="OleDbPermission"
Description="System.Data.OleDb.OleDbPermission, System.Data, Version=2.0.0.0,
Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
Затем можно указать параметры для добавленного класса OleDbPermission, в том числе и ограничения, применяемые к строкам соединения OLEDB. После этого можно указать наборы разрешений, включающие класс безопасности OleDbPermission, добавив элемент IPermission к элементу PermissionSet с именем ASP.NET в файле политики доверия. Например, в приведенном ниже примере кода указывается, что единственное разрешенное соединение OLEDB предоставляет неограниченный доступ к базе данных Access Catalog.mdb.
<PermissionSet
class="NamedPermissionSet"
version="1"
Name="ASP.Net">
<IPermission
class="OleDbPermission"
version="1"
Unrestricted="true" />
</PermissionSet>
Некоторые разрешения, такие как OleDbPermission, позволяют указать дополнительные ограничения, сужающие предоставляемый или ограничиваемый доступ. Например, разрешение OleDbPermission позволяет предоставлять доступ на соединение с помощью поставщика данных OLE DB платформы .NET Framework с определенными ограничениями на допустимые строки соединения OLEDB. В приведенном ниже примере кода указывается, что допускаются только разрешенные подключения OLEDB к базам данных Access.
<IPermission class="OleDbPermission" version="1">
<add ConnectionString=
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\access_data\catalog.mdb""
KeyRestrictions=""data source=;user id=;password=;"
KeyRestrictionBehavior="AllowOnly"/>
</IPermission>
Обновленный файл политики доверия можно сохранить и использовать вместо текущего файла Web_hightrust.config; также можно создать новый файл политики доверия, при этом используя его в качестве файла политики для уровня доверия High, или же создать новый уровень доверия, как показано в приведенном ниже примере кода.
<trustLevel name="HighCustom"
policyFile="web_highcustom.config"/>
Чтобы сохранить параметры по умолчанию, ASP.NET хранит две копии каждого файла с параметрами уровней доверия. Одна копия имеет расширение CONFIG, как было показано ранее в разделе, посвященном настройке. Файл CONFIG содержит параметры всех уровней доверия, используемых системой. Вторая копия имеет расширение CONFIG.DEFAULT и содержит параметры по умолчанию для соответствующего уровня доверия. При изменении текущих параметров уровня доверия и необходимости восстановления значений по умолчанию можно заменить содержимое файла CONFIG содержимым файла CONFIG.DEFAULT.
Дополнительные сведения об управлении файлами политики доверия см. в разделе «Практическое руководство. Использование среднего уровня доверия в ASP.NET 2.0» на веб-узле Шаблоны и методики (PAG). Рекомендации по безопасности для приложений.