ASP.NET Lab

The Best Web, The Best Future

博客园 首页 新随笔 订阅 管理

这个部分提供了能够被设计成与安全系统一起运作的不同编码方式的概览。

安全中立代码

安全中立代码并不明确地与安全系统做任何事情。它只与它所接收到的许可一起运行。虽然对于与被保护的操作(如使用文件、网络,等等)相关联的安全异常进行捕获的应用程序能够导致一个未经处理的异常,但是安全中立代码仍然能够获得 .NET Framework 安全技术的优势。

安全中立的库拥有一些需要你来理解的特殊特性。假设你的库提供了使用文件或者调用了非管理代码的 API 元素;如果你的代码没有相应的许可,那么它将无法与被描述的那样被运行。但是,即使代码拥有许可,任何对它进行调用的应用程序代码也都必须拥有相同的许可来完成任务。如果对于代码调用并没有得到正确的许可,那么对于安全堆栈的代码访问将会导致一个 SecurityException 异常。

不是可重用组件的应用程序代码

如果你的代码是某个不会通过其他代码而被调用的应用程序中的一部分,那么安全就是简单的并且是特殊的编码,同时也不是必需的。但是,要记住恶意代码是能够对你的代码进行调用的。虽然代码访问安全可以阻止恶意代码对于资源的访问,但是这种代码仍然能够读取到可能包含有敏感信息的字段值或者属性值。

另外,如果你的代码从互联网或者其他不可靠的来源中接受到了用户的输入,那么你就必须谨慎地对恶意输入进行处理。

本地代码实现的被管理包装器

典型地在这个情节中,一些有用的功能是在需要对于被管理代码可用的本地代码中而被实现的。使用平台调用或者 COM 的互用性就能够容易地编写出被管理的包装器。但是,如果你这样做,那么你的包装器的调用者就必须拥有非管理的代码权限来成功地完成任务。在默认的策略之下,这表示从局域网或者从互联网被下载的代码将无法与这些包装器一起运作。

最好是只给予包装器代码以非管理的代码权限,而不是所有的应用程序。如果底层的功能没有暴露资源并且声称实现是“安全的”,那么包装器就只需要声明它的权限,从而允许任何代码对它进行调用。因此在资源被包含的时候,安全编码就应该与在稍后部分被描述的库代码一样。因为包装器潜在地把调用者暴露给了它们的资源,所以谨慎地对本地代码的安全性进行核实是必需的并且也是包装器的职责。

暴露了被保护资源的库代码

对于安全编码来说,这是最强大的并且也是潜在的危险(如果错误地被完成)方式:你的库将与一个接口一样服务于其他代码来访问特定的并且不再是另外可用的资源,这与在 .NET Framework 中为它们所使用的资源而强制许可的类是一样的。

posted on 2007-02-06 11:06  Laeb  阅读(337)  评论(0编辑  收藏  举报