WEB开发网
开发学院软件开发C语言 Effective C# 原则47:选择安全的代码 阅读

Effective C# 原则47:选择安全的代码

 2009-02-19 08:17:21 来源:WEB开发网   
核心提示: 不管什么时候,你都可以通过创建恰当的安全程序集来避免非托管内存访问,Effective C# 原则47:选择安全的代码(2),一个安全的程序集,也就是一个不用使用任何指针来访问其它非托管,选择性的,你可以使用更一般的独立存储虚拟目录,或者托管的堆内存,不管你是否知道

不管什么时候,你都可以通过创建恰当的安全程序集来避免非托管内存访问。一个安全的程序集,也就是一个不用使用任何指针来访问其它非托管,或者托管的堆内存。不管你是否知道,你所创建的所有C#代码几乎都是安全的。除非你在C#编译器上打开了不安全的编译开关/unsafe,否则你所创建的都是安全代码(译注:就算打开了开关也不是说就编译成不安全代码了,还要看你的代码是怎样写的。)。/unsafe充许用户使用CLR不进行的验证的指针。

要使用不安全代码的原因很少,特别是一常规的任务中。指向原始内存的指针比要检测的安全的引用快一些。在一些经典的数组中,它们可能要快上10倍以上。但当你使用不安全结构时,要明白任何的不安全代码都会影响整个程序集。当你创建不安全块时,应该考虑把这些算法独立到一个程序信中(参见原则32)。这样可以在整个程序上限制不安全代码的影响。如果它是独立的,只有实际调用它的访问者才会受到影响。其它剩下的,你还是可以在更严格的环境中使用安全机制。你可能还须要不安全代码来处理一些须要直接指针的P/Invoke或者COM接口。同样的推荐:独立它。不安全代码只会影响它自己的小程序集,不再有其它的。

对于访问的建议很简单:只要可能,都应该避免访问非托管内存。

接下来的安全核心就是文件系统。程序要存储数据。从Internet上下载回来的代码,文件系统中的大多数地方都不能访问,否则会有很大的安全漏洞。是的,完全不许访问文件系统就很难创建能使用的程序。通过使用独立存储可以解决这一问题。独立存储可以穿越基于程序集而独立的虚拟的目录,以及应用程序域,以及当前的用户。选择性的,你可以使用更一般的独立存储虚拟目录,该目录是基于程序集或者当前用户的。

Tags:Effective 原则 选择

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接