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


Уровни доверия и файлы политик 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). Рекомендации по безопасности для приложений.

См. также

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

Механизм политики ASP.NET

Другие ресурсы

Безопасность веб-приложений ASP.NET