【PB.NET编程系列2】PB.NET程序的CAS设置和强名称

CAS概述

CAS是.NET程序的一种安全机制,以下文字摘自www.microsoft.com,通过它我们可以了解为什么会采用CAS

“人们向我询问有关访问控制的问题时,通常是想更多地了解基于角色的安全性,即基于用户身份控制资源的访问。 CAS 理解起来可能很难,因为它不是基于用户身份,而是基于所运行代码的身份实现安全保护,其中包括代码来源(例如来自本地计算机或 Internet)、代码构建者以及代码签名者等信息。系统根据与代码及其身份相关联的“证据”,来限制代码能够执行哪些操作、访问哪些资源。

为什么要基于代码身份对代码的活动进行限制?通常情况下是不需要这样做的。例如,假设您在运行一种高级而昂贵的图形编辑程序,允许它访问您(作为运行程序的用户)能够访问的计算机上的任何资源(文件、注册表设置等等)。这时,您了解并信任软件的发布者,并愿意允许软件对运行它的平台进行高级别的访问。虽然为了避免计算机被意外损坏,您通常希望应用程序运行时使用的用户帐户具有尽可能低的权限,但在上述情况下,应用程序本身的信任级别并不是安全性的考量点。

但在有些情况下,您需要运行代码,却并不了解或者不完全信任它的作者。目前在浏览 Web 时最常遇到此类情况。现代的浏览器经常要运行来自所访问的 Web 站点的代码。这些代码通常是 JavaScript 或 DHTML,但也可能是浏览器能够识别的其他形式的可执行文件。当浏览器在计算机上运行这些代码时,会进入到沙箱环境中。沙箱是用于对代码有权访问的计算机资源进行控制的受限执行环境。沙箱是必须使用的;否则,来自 Internet 的相对匿名的代码就可能会每天读取您的私人文件并将病毒安装到您的计算机上。许多浏览器基于所运行代码的来源提供不同级别的沙箱处理。例如,Microsoft Internet Explorer 定义了区域的概念。与来自“受信”站点区域的代码相比,来自 Internet 区域的代码能够执行的活动相对较少。当实施沙箱规则的软件存在缺陷时,或者用户在被欺骗的情况下批准在沙箱外执行代码时,就会出现安全漏洞。

对于沙箱处理和基于代码身份的安全性而言,在浏览器中运行来自 Web 站点的代码是常见情况。CLR 中的 CAS 提供了基于代码身份进行代码沙箱处理的常规机制。这是 CAS 的主要优势及主要用途。如今,Internet Explorer 使用 CAS 对浏览器中运行的来自 Web 站点的托管代码(控件或独立的应用程序)进行沙箱处理。CAS 也可用来对从本地 intranet 网络共享位置运行的应用程序进行沙箱处理。此外,Visual Studio® Tools for Office (VSTO) 还将它作为 Microsoft Office 文档托管加载项的宿主。就服务器而言,ASP.NET 将它用于 Web 应用程序,SQL ServerTM 2005 将它用于托管存储过程。CAS 在许多情况下都会弹出,这通常发生在后台。”

代码访问安全性

PB程序和组件支持CAS机制,只要配置合理就可以做到对程序的受限访问和运行。PB允许我们为.NET Web Forms, .NET Web Service, .NET Windows Forms 和智能客户端程序设置最小权限的信任限制以保证对最终客户端的安全影响。

对于.NET Web Forms 和 Web Service 项目,你可以在发布项目后更改Web.config 文件去支持沙箱。

如何设置信任选项

每个工程项目的属性窗口都会有一个属性页用来设置完全或部分的权限

对于Windows Forms 程序来说你可以选择local intranet trust 或者 internet trust.或Custom,当你选择这三项时下面的list box会允许你修改具体的权限,如上图。

上图的权限列表中的选项也可以用.NET Framework 2.0 SDK进行修改,打开控制面板>性能和维护>管理工具>Microsoft .NET Framework 2.0 配置在树形的左侧按下图选择,然后在右边选择查看权限

对于智能客户端程序来说,可以把权限设置信息保存在manifest文件中以便发布。当运行智能客户端程序后,程序会自动加载manifest文件并创建一个沙箱环境。

对于普通的Windows Forms程序,在工程项目的属性页security中定义的权限设置只在PB IDE上运行时才起作用,如果用户从文件浏览器或输入一个UNC地址(比如\\server\myapp\myapp.exe)来运行,那么本地系统的权限设置将取代PB工程项目里的权限设置。

权限错误消息

如果你的.NET程序执行了未经允许的操作,那么.NET Framework将会抛出一个异常。比如,缺省的local intranet trust 权限级别没有文件的IO操作权限,如果程序试图执行文件IO,那么.NET Framework将输出一个File Operation exception。

可以通过在PB代码里内嵌C#代码的方式捕获这一异常:

 

 #if defined PBDOTNET then 
 try
 ClassDefinition cd_windef
 cd_windef = FindClassDefinition("w_1")
messagebox("w_1's class
definition",cd_windef.DataTypeOf)
 catch(System.Security.SecurityException ex)
 messagebox("",ex.Message)
 end try
 #end if

 

为了使用System.Security.SecurityException,你必须在所有.NET程序里包含 mscorlib.dll 这个文件,而且你可以在PBTrace.log 文件里找到关于错误的详细日志。

如果异常抛出时没有被捕获,那会触发PB的SystemError事件,如果SystemError里也没有相应的处理代码,那么对于Win Forms程序会弹出一个缺省的.NET错误对话框显示错误信息,用户可选择继续运行或立即退出程序。同样条件下的Web Forms程序会直接出现一个系统错误的对话框并直接终止程序。

强名称

‘强名称’这个单词理解起来是有点费劲了,这又是.NET的一个特性,以前win32程序经常因为dll版本差异导致程序错误,因此.NET加入了这一类似com的guid的东东。所谓强名称由程序集的标识——其简单文本名称、版本号和区域性信息(如果提供)——加上公钥和数字签名组成。强名称是使用相应的私钥,通过程序集文件(包含程序集清单的文件,并因而也包含构成该程序集的所有文件的名称和散列)生成的。PB能够将强名称分配给一个.NET程序集。强名称相同的程序集应该是相同的。你可以在PB的工程项目的属性页Sign中设置强名称。

关于强名称的描述还可以参考msdn
  ms-help://MS.VSCC/MS.MSDNVS.2052/cpguide/html/cpconstrong-namedassemblies.htm  
  ms-help://MS.VSCC/MS.MSDNVS.2052/cpguide/html/cpconstrongnamescenario.htm

Sign属性页的解释

设置项描述
Sign the assembly勾选这一项后才能启用下面的"Choose a strong name key file" "Delay sign only"和 New 按钮
Choose a strong name key file包含一个浏览和新建按钮,浏览按钮可以选择.snk后缀的文件。新建按钮将调用.NET Framework SDK里的Sn.exe去创建一个新的序列号文件。
Delay sign only在开发和测试程序集时,允许访问安全的私有密钥可能会导致私钥泄密,因而.NET框架支持一种称作延迟签名(delayed signing)的技术,有时也叫局部签名(partial signing)。延迟签名允许我们只使用公司的公有密钥就可以生成程序集。勾选此项等同于调用.NET Framework SDK里的Sn.exe并使用 -Vr 命令行开关阻止系统对程序集进行完整性验证。这样还可以使CLR在运行时加载程序集的时候,跳过对其内任何文件的散列值的检查。
Mark the assembly with AllowPartiallyTrustedCallerAttribute

(只针对.NET Web Service 和 .NET Assembly projects)

缺省情况下强名称的程序集不允许使用受限制的安全设置且只能被其他有完全权限的程序调用。勾选此选项后将允许其他受限安全级别的程序能调用它。

转载于:https://www.cnblogs.com/newskysoft/archive/2009/07/21/1527669.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值