21

有人可以解释一下吗?我在互联网上找不到任何东西,所有内容都在谈论如何以某种方式进行,但没有确切说明它是什么。

此外,什么是完全受信任的程序集,它们之间有何不同?

我有一个 MS 认证考试,这是我唯一不明白的话题。

编辑:谢谢大家。现在我对 .NET 中的安全性有了更好的理解。我能够通过我的认证考试。

4

3 回答 3

17

.NET 实现了一种称为代码访问安全性的安全模型。非托管代码以启动应用程序的用户的特权和权限运行,即使代码碰巧来自恶意来源。

托管代码需要提供其来源的证据;有多种方法可以做到这一点(例如,使用某个密钥对代码进行签名,从某个 URL 下载代码,代码位于磁盘上的某个目录中,等等)。基于该证据,程序集被分组,并为其应用策略。策略可以授予代码组某些权限,主要涉及访问系统资源(执行 DNS 查找、打开网络连接、访问“隔离存储”、访问本地文件系统(全部或仅选择的目录)、访问注册表,访问网络共享等)。控制面板中有一个工具可让您定义此类策略。

当程序集尝试执行某些受限操作时,会进行权限检查。如果授予访问权限,则操作继续。如果检查失败,则抛出异常。检查通常涉及堆栈遍历(即该操作必须信任所有调用者),但也有例外。

作为一种特殊情况,可以将“完全信任”分配给程序集,授予所有权限。虽然我之前没有听说过“部分信任”这个词,但我认为它指的是拥有某些权利但不是完全信任的程序集。

请理解这只是一个概述 - 关于代码访问安全性还有很多要说的。

于 2008-12-17T21:28:44.187 回答
11

完全信任程序集具有一组不受限制的代码访问安全权限,它允许代码访问所有资源类型并执行特权操作,仅受操作系统安全性约束。例如,如果用户 Bob 不能访问文件 Y,那么在 Bob 的用户空间中运行的完全信任程序集也不能。

部分信任程序集意味着代码在不完全信任的情况下运行。.NET Framework 有几个预定义的信任级别,您可以直接使用或自定义这些级别以满足您的特定安全要求。例如,您可以通过拒绝 SQLClientPermission 来阻止程序集访问 SQL 数据库。

程序集的信任级别也可能因其来源而降低。例如,来自网络共享的代码(在旧版本的 .NET 中)的可信度低于来自本地计算机的代码,因此其执行特权操作的能力受到限制。

于 2008-12-17T21:31:58.690 回答
1

也许一些背景会有所帮助。

想想浏览stackoverflow之类的东西。浏览器本身的代码可以在您的计算机上执行任何操作(例如删除文件),还有网站的 javascript 代码。除了漂亮的淡入淡出效果和其他一些显示魔法之外,javascript 代码对您的计算机无能为力。

.net 有能力在本地应用程序和远程应用程序之间提供这种区别。您可以编写将在本地计算机上运行并且能够对本地计算机执行任何操作的应用程序。此应用程序可以具有从 Internet 下载扩展 dll 的功能。这些扩展将能够进行计算和操作显示。但是它们里面的代码希望能够删除文件。因为它不被信任。

细节是错误的,但这就是想法(据我所知)。

于 2008-12-17T21:41:29.437 回答