【问题标题】:What is a partially trusted assembly/application/code/etc in .NET?.NET 中的部分受信任的程序集/应用程序/代码/等是什么?
【发布时间】:2010-09-27 10:10:58
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: .net assemblies partial-trust


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 请注意,即使是 FullTrust 程序集仍然受到操作系统安全性的限制。例如,如果用户 Bob 无法访问文件 Y,那么在 Bob 的用户空间中运行的完全信任程序集也不会。
    【解决方案2】:

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

    partial-trust assembly 表示代码在不完全信任的情况下运行。 .NET Framework 有几个预定义的trust levels,您可以直接使用它们或对其进行自定义以满足您的特定安全要求。例如,您可以通过拒绝 SQLClientPermission 来阻止程序集访问 SQL 数据库。

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

    【讨论】:

    • 信任级别链接已失效。
    【解决方案3】:

    也许一些上下文会有所帮助。

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

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

    细节是错误的,但这是想法(据我了解)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-06
      • 1970-01-01
      • 2012-08-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多