ASP.NET 信任级别和策略文件
更新:2007 年 11 月
信任级别是使用 <securityPolicy> 配置元素与策略文件关联的,该配置元素只在站点级配置文件 (Web.config) 中有效。您可以通过向配置节中添加指定信任级别名称和要使用的策略文件的项,来添加或移除信任级别。默认信任文件安装在 Config 目录下包含 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。可以在承载多个应用程序且需要限制所承载应用程序的信任级别的服务器上这样做。
修改信任级别文件
可以修改策略文件或使用自定义权限集创建新的策略文件。例如,通过首先将 OleDbPermission 类添加到策略文件的 SecurityClasses 节,可以复制 Web_hightrust.config 文件的内容并分配权限来建立 OLEDB 连接,如下面的代码示例所示。
<SecurityClass Name="OleDbPermission"
Description="System.Data.OleDb.OleDbPermission, System.Data, Version=2.0.0.0,
Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
然后可以为指定的 OleDbPermission 指定参数,包括 OLEDB 连接字符串的限制。下一步,通过将一个名为 ASP.NET 的 IPermission 元素添加到信任策略文件中的 PermissionSet 元素,可以指定哪些权限集包含 OleDbPermission 安全类。例如,下面的代码示例指定仅有允许的 OLEDB 连接才被授予对 Catalog.mdb Access 数据库的无限制访问。
<PermissionSet
class="NamedPermissionSet"
version="1"
Name="ASP.Net">
<IPermission
class="OleDbPermission"
version="1"
Unrestricted="true" />
</PermissionSet>
有些权限(如 OleDbPermission 权限)允许指定附加限制,这些限制缩小了被授予或拒绝的访问权限范围。例如,OleDbPermission 权限允许您授予使用 OLE DB .NET Framework 数据提供程序建立连接的访问权限,但是对所允许的 OLEDB 连接字符串有一定的限制。下面的代码示例指定只能授予到 Access 数据库的允许的 OLEDB 连接。
<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.default 文件的内容替换 .config 文件的内容。
有关管理信任策略文件的更详细说明,请参见 Patterns and Practices (PAG): Security Guidance for Applications(模式和实践 (PAG):应用程序安全指南) 中的“How To: Use Medium Trust in ASP.NET 2.0”(如何:在 ASP.NET 2.0 中使用中级信任)。