ASP.NET 代码访问安全性

asp.net|安全|安全性|访问

 使用 ASP.NET 来承载多个 Web 站点的一个主要优点是:公共语言运行库支持代码访问安全,可帮助保护服务器应用程序的安全。根据关于代码来源的证据(例如带有强名称的程序集或源的 URL 等证据),代码被分配到安全区域分类中。如果不能为安装在公共服务器上的各个互不相关的应用程序配置安全机制,那么 ASP.NET 页中属于一个应用程序的代码将能够读取另一个应用程序中的文件(例如 Web.config 文件)。以完全信任方式运行的应用程序只受操作系统帐户的限制,这些应用程序在该帐户下执行。
通过对程序集进行强命名并为该程序集添加策略,可以方便地为个别程序集处理代码访问安全性。但是,作为动态页编译的结果,将动态生成许多 ASP.NET 程序集,因此这些程序集未进行强命名,所以需要附加功能。

ASP.NET 允许您向应用程序分配对应于一组预定义权限的可配置信任级别。默认情况下(除非显式更改配置),应用程序将接收到与它们提供的证据相称的信任级别。例如,本地应用程序必须在 MyComputer 区域中使用 Full 信任权限集运行,位于通用命名规则 (UNC) 共享上的应用程序必须在 Intranet 区域中使用 LocalIntranet 限制权限集运行。如果要使用低于 Full 信任的级别运行 Web 应用程序,则您必须使用 ASP.NET 信任级别和策略文件中定义的某个预定义信任级别来实施部分信任策略。

您可以使用以下配置设置重写默认行为并将应用程序和给定的安全策略关联起来。

      

<location path="MyApp" allowOverride="false"><trust level="High"originUrl="http://www.contoso.com"/></location>

<trust> 配置标记可应用于计算机级别或层次结构中的任何应用程序根目录。

如果要为整个站点设置策略,您可以通过将站点的根目录指定为路径位置完成该操作,如下所示。

<location path="ContosoSite" allowOverride="false"><trust level="High"originUrl="http://www.contoso.com"/></location>

如果不想让应用程序能够指定它们自己的信任级别(多数共享服务器安装中是这种情况),则在使用 allowOverride 属性指定 <location> 指令时应小心。

下表列出了 <trust> 元素默认支持的属性。

属性 说明 默认支持的值
level 指定应用程序将在其中运行的安全区域。 Full、High、Medium、Low 和 Minimal。
originUrl 允许管理员设置应用程序的源的 URL。
这允许依赖于宿主概念的权限正常工作

格式正确的 HTTP URL。

默认情况下,向与不同的安全级别关联的策略授予的权限显示在下表中。

    级别
权限 完全 最小
AspNetHostingPermission 完全 最小
Environment Un Un 读:TEMP、TMP、OS、USERNAME、COMPUTERNAME        
FileIO Un Un 读、写、追加、路径发现:应用程序目录 读、路径发现:应用程序目录    
IsolatedStorage Un Un AssemblyIsolationByUser、不受限制的用户配额 1 MB 配额(对于个别站点可能有所变化)、AssemblyIsolationByUser    
Reflection Un ReflectionEmit            
Registry Un                
Security Un 执行、断言、控制主体、控制线程、远程处理配置 执行、断言、控制主体、控制线程、远程处理配置 执行 执行
Socket Un Un            
WebPermission Un Un 连接到原始主机(如果已配置)        
DNS Un Un Un        
Printing Un 默认打印 默认打印        
OleDBPermission Un                
SqlClientPermission Un Un AllowBlankPassword=false        
EventLog Un                
Message
Queue
Un                
Service
Controller
Un                
Performance
Counters
Un                
Directory
Service
Un                

Un = 无限制的

空白 = 无权限

如果某个权限级别可用但未在安全策略中明确提出,则使用 Full 信任级别运行的应用程序可以使用它(因为它们具有 Full 信任权限集)。使用较低信任级别运行的应用程序将不能使用被非显式权限保护的资源,除非您明确更改策略允许它使用。

如该表所示,High 信任应用程序对位于其应用程序目录中的文件具有读/写权限,而 Low 信任应用程序对位于其应用程序目录中的文件具有只读权限。因为 FileIO 权限依赖于物理路径(例如 c:\MyAppPath),所以 ASP.NET 在策略文件中使用标记化的语句,这些标记化的语句在运行时被应用程序的相关路径信息替换。

请注意,WebPermission 允许应用程序连接到原始主机。该机制通过在给定应用程序的 <trust> 部分提供可选的 OriginUrl 属性在 ASP.NET 中工作。OriginUrl 属性用于替换策略文件中的 $OriginHost$ 变量,如 Web_hightrust.config 中的以下代码所示。

<IPermission class="WebPermission" version="1"><ConnectAccess><URI uri="$OriginHost$"/></ConnectAccess></IPermission>

SocketPermission 获取主机名或以点分隔的 IP 字符串(可能带有通配符),WebPermission 获取包括协议的正则表达式(例如 http://backendmachine/.*)。如果要对此进行更改,您可以使用所需的权限更改策略文件(或通过复制默认设置创建新的策略文件)。例如,您可以从 ASP.NET 命名权限集更改 SocketPermission 部分,以向端口 8080 上的“backend1”和“backend2”授予 TCP 套接字连接,如下所示。

<IPermission class="SocketPermission" version="1"><ConnectAccess><ENDPOINT host="backend1" transport="Tcp" port="8080"/><ENDPOINT host="backend2" transport="Tcp" port="8080"/></ConnectAccess></IPermission>
 
出处:MSDN

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索权限
, 文件
, 应用程序
, 运行
, get unning asksandroid
, 低权限
, 策略
级别
,以便于您获取更多的相关知识。

时间: 2024-08-22 14:28:38

ASP.NET 代码访问安全性的相关文章

向WCF新增代码访问安全性,第2部分

目录 .NET Framework 3.5 中的宿主端 CAS 部分受信的服务 App Domain Host 实现 AppDomainHost 部分受信的宿主 结构化宿主端安全要求 实现结构化宿主要求 AppDomainHost 的其他方面 在 2008 年 4 月刊的这一专栏中,我讨论了缺少对代码访问安全性 (CAS) 足够支持的情形,以及向 Windows Communication Foundation (WCF) 添 加合适 CAS 支持的动机.然后展示了如何在客户端添加该支持,从而使

WCF中的代码访问安全性,第1部分

目录 CAS 概览 客户端 CAS 部分信任的客户端 客户端请求 原始 WCF 请求 PartialTrustClientBase<T> 的结构化请求 分析 Invoke 的请求 实现客户端结构化请求 在Microsoft .NET Framework 1.0 中引入的代码访问安全性 (CAS) 可 能是 .NET 与非托管代码相比唯一有所区别的功能.CAS 内置于 .NET Framework 的每个结构中,它影响托管代码中的每项操作,这些是非托管代码永 远无法做到的. Windows Co

ASP.NET代码访问安全(Code Access Security)

代码访问安全(Code Access Security),顾名思义,是用来限制代码的.它能限制代码能否被执行,进而来限制ASP.NET程序能执行什么样的操作.比如CAS限制你不允许使用FileIOPermission,那么ASP.NET程序便不能进行IO操作.同样,如果限制你使用SqlClientPermission,ASP.NET程序便不能进行SQL Server的操作. CAS默认定义了5个不同的level,它们是Full,High,Medium,Low 以及Minimal.从Full到Mi

PHP和ASP.NET代码哪个运行速度更快?

刚刚在9月编程语言排行榜上取得历史性突破的PHP在Web开发领域最到的对手可能就是基于微软.NET技术的ASP.NET.近日,微软的Joe Stagner在博客上发表了一系列文章比较了PHP和ASP.NET性能方面的文章,引起了来自双方程序员的大量回应.Joe表示,他会将这样的测试持续下去,并寻求更为合适的方式,以获得对实际项目来说尽可能有参考价值的结论. Joe在博客中称,一般来说,作性能测试的目的是要尝试证明一方比令一方要快.我受雇于微软,同时编写PHP和ASP.NET代码.我在.NET出现

在ASP.NET中访问DataGrid中所有控件的值

asp.net|datagrid|访问|控件 要在ASP.NET中访问DataGrid中所有控件的值,可以遍历DataGrid中每个控件:下面就是实现这一功能的aspx代码和脚本代码[VB.NET]: <%@ Page Language="vb" AutoEventWireup="false" Codebehind="DataGridAccessValues.aspx.vb" Inherits="aspxWeb.DataGridA

在ASP.NET中访问SQL Server

asp.net|server|访问 在ASP.NET中访问SQL Server数据库有两种方法,它们是System.Data.OleDb和System.Data.SqlClient.下面这段程序以System.Data.SqlClient为例访问本地数据库服务器. 首先导入名字空间:System.Data和System.Data.SqlClient.详细代码看源程序.<%@ Import Namespace="System.Data" %><%@ Import Nam

用代码访问InfoPath表单内容

表单是MOSS的一个很重要的特性,特别是有了Form Services的支持后,我们在做表单解决方案的时候,经常会用到Infopath, 那么如何使用代码访问保存于SharePoint表单库中的InfoPath表单的内容,是必需知道的. 总结了下,有如下3种方式可实现代码对表单内容的访问: 1.提升表单模板属性 2.通过XmlDocument 对象对表单文件操作 3.反序列化表单数据架构 接下来,分别简单谈谈这3种方法的简单实现步骤 第一种方式: 提升表单模板属性表单操作: 在设计完表单模板,执

Windows 2003 asp网页不能访问的常见问题

  今天去帮朋友设置服务器,操作系统为WIN2003,使用了IIS6.0,不过发现只能访问HTML的网页,ASP网页就访问不了,出现:您访问的页面不存在或无法访问之类的错误..想了一下,确定不会是动态网页出问题了,因为是刚下回来的压缩包;所以就应该是系统配置不对了. 上网查了一下资料,才知道在默认设置下IIS6.0是不支持ASP的,它支持了.Net架构.所以在使用IIS6.0的时候要注意一些设置: 1. [开始]--[程序]--[管理工具]--[Internet信息服务管理器],在服务器名下的"

分享后经过多人点击才能看的php/asp/htmljs代码怎么写

问题描述 分享后经过多人点击才能看的php/asp/htmljs代码怎么写 刚刚在一个网站上看到一个源码,需要你分享该网页后.有三个不同的人点击访问了.你才能看到他的隐藏内容.尽量不用api 解决方案 那最简单的方式就是根据当前来访者生成一个身份id,如果有会员系统就好了,这样的话可以直接根据用户id来判断了,分享的时候带上用户id这样再根据童虎id来进行统计,每次用户打开的时候更新一下这个推广用户的次数,当这个推广用户打开的时候判断一下推广次数,这样就可以实现来. 解决方案二: 你需要一个服务