Effective C# 原则47:选择安全的代码
2009-02-19 08:17:21 来源:WEB开发网.Net运行时已经设计好了,一些怀有恶意的代码不能渗透到远程计算机上并执行。目前一些分部式系统依懒于从远程机器上下载和执行代码。如果你可以通过Internet或者以太网来发布你的软件,或者直接从web上运行,但你须要明白CRL在你的程序集中的一些限制。如果CLR不是完全相信一个程序集,它会限制一些的行为。这些调用代码要有访问安全认证(CAS)。从另一方面来说,CLR强制要求基于角色的安全认证,这样这些代码才能或者不能在基于一个特殊的角色帐号下运行。
安全违例是运行时条件,编译器不能强制它们。幸运的是,它们绝不会在你的开发机器上出现,而且你所编译的代码从你自己的硬件上加载,这就是说,它有更高的信任级别。讨论所有潜在的.Net安全模型可以足足写上几本书,但你可以了解合理行为的一小部份,这样可以让你的程序集与.Net的安全模式更容易的交互。这些推荐只有在你创建一个组件程序库时,或者是开发一些通过网络发布的组件和程序集是才可以参考应用。
通过这个讨论,你应该记住.Net是一个托管的环境。这个环境保证有一个明确的安全环境。在安装时可以用.Net的配置策略来管理安全策略。大多数.Net框架库是在安装时对配置策略是安全信任的。它会查明安全问题,这就是说CLR可以检测IL而且确保它不会有什么潜在的危险行为,例如直接访问原始内存。它不会在访问本地资源时要求特殊的安全权限进行断言。你应该试着遵守同样的检测,如果你的代码不须要任何的安全权限,就应该避免使用CAS的API来对断定访问权限,否则你所做的只是降低程序性能。
你要使用CAS的API来访问一些受保护的资源,而这些资源是要求增加的特权的。很多通用的受保护资源是非托管的内存和文件系统。其它一些受保护的资源还包括数据库,网络端口,windows注册表,以及打印子系统。在每种情况下,如果调用代码没有足够的许可,试着访问这些资源都会引发一个异常。而且,访问这些资源可能引发运行时建立一个安全栈上的询访,以确保当前栈上的所有的程序集有恰当的许可。让我们看一下内存以及文件系统,讨论安全系统和机密问题中最实际的一些问题。
- ››选择好的广告联盟:选择广告联盟理解掌握的六大绝招...
- ››选择谁? 揭秘90后必备的音乐播放器
- ››选择性关闭Win 7视频预览 节约系统资源
- ››选择适合的SRAM存储器的技巧
- ››Effective C# 原则40:根据需求选择集合
- ››Effective C# 原则41:选择DataSet而不是自定义的...
- ››Effective C# 原则42:使用特性进行简单的反射
- ››Effective C# 原则43:请勿滥用反射
- ››Effective C# 原则44:创建应用程序特定的异常类
- ››Effective C# 第6章:杂项
- ››Effective C# 原则45:选择强异常来保护程序
- ››Effective C# 原则47:选择安全的代码
更多精彩
赞助商链接