【问题标题】:Testing .NET code in partial trust environments在部分信任环境中测试 .NET 代码
【发布时间】:2008-08-21 18:29:42
【问题描述】:

我想在部分信任环境中测试某段 .NET 代码的行为。最快的设置方法是什么?随意假设我(和其他读者)完全是 CAS 菜鸟。

@Nick:感谢您的回复。唉,有问题的工具是明确用于非托管代码的。我没有在我的问题中说“托管”,也不应该假设人们会从“.NET”标签中推断出来。

【问题讨论】:

    标签: .net code-access-security


    【解决方案1】:

    这是一个很好的问题,尤其是从 TDD 的角度来看,并在不同的信任场景下验证代码。

    我认为我处理这个问题的方式类似于 -

    • 使用允许您传入 PermissionSet 的 AppDomain.CreateDomain() 重载在我的 TDD 代码中创建一个 AppDomain。将构建 PermissionSet 以匹配您想要测试的不同信任场景。

    • 将包含被测逻辑的程序集加载到应用程序域中

    • 在应用域中创建类型/调用方法等实例,捕获安全异常

    有点像。我还没有时间进行概念验证。

    【讨论】:

      【解决方案2】:

      您正在寻找的功能已内置在 Visual Studio 中:

      在项目的安全选项卡上,有一个“高级...”按钮,可让您配置是要在完全信任的情况下进行调试,还是在指定的信任级别上进行调试。

      【讨论】:

        【解决方案3】:

        使用Microsoft Application Verifier

        AppVerifier 帮助确定:

        • 当应用程序正确使用 API 时: (不安全的 TerminateThread API。,正确使用线程本地存储 (TLS) API。o 正确使用虚拟空间操作(例如,VirtualAlloc、MapViewOfFile)。
        • 应用程序是否使用结构化异常处理隐藏访问冲突。
        • 应用程序是否尝试使用无效句柄。
        • 堆中是否存在内存损坏或问题。
        • 应用程序是否在资源不足的情况下内存不足。
        • 是否正确使用了临界区。
        • 在管理环境中运行的应用程序是否能在权限较少的环境中正常运行。
        • 应用程序以受限用户身份运行时是否存在潜在问题。
        • 线程上下文中的未来函数调用中是否存在未初始化的变量。

        【讨论】:

          【解决方案4】:

          您应该查看 .NET Framework 配置工具。它位于 .NET SDK 中,您可以在此处找到有关运行它的说明... http://msdn.microsoft.com/en-us/library/2bc0cxhc.aspx

          运行时安全策略部分,您会发现 3 个策略级别:企业、机器和用户。如果您深入了解 Machine 或 User,您会发现 Code GroupsPermission Sets 的定义。当您说要在部分信任环境中测试一些 .NET 代码时,我猜您会想要针对已经定义的标准权限集之一进行测试,例如 Internet 。您需要定义一个与您的应用(或特定程序集)匹配的 代码组,并将您选择的权限集分配给该 代码组

          您也可以定义自己的自定义权限集,但现在让我们保持简单。

          选择您是希望新代码组存在于机器范围内,还是仅存在于您的用户帐户中,并相应地深入到机器或用户策略级别。您将看到一个名为 _All _ Code_ 的代码组。通过右键单击并选择 New...

          在其中创建一个子代码组

          给它一个名字,比如 PartialTrustGroup,然后点击 Next

          您必须为该组指定成员条件,并且有多种类型。我喜欢在我的机器上创建一个名为 PartialTrust 的特定文件夹,然后创建一个匹配的 URL 成员资格条件。所以,我的网址看起来像这样...... file://c:/users/martin/documents/partialtrust/*

          * 是一个通配符,用于捕获该路径下的任何程序集。点击下一步

          现在您可以为新代码组选择权限集。现在,选择 Internet 。这是一个相当严格的集合,类似于 Java 小程序沙箱。点击下一步完成

          现在右键单击您的新代码组并选择属性。在“常规”选项卡中,确保选中最顶部的复选框,然后单击“确定”。

          现在,从您指定的 URL 下的位置加载的任何 .NET 程序集都将应用 Internet 权限集。如果您没有编写代码来仔细观察减少的权限集,预计会得到一些 SecurityExceptions。

          对不起,这是一个很长的描述。它确实比听起来简单得多。

          【讨论】:

            【解决方案5】:

            我刚刚在我的博客上发布了一篇标题为Partial Trust Testing with xUnit.net 的文章。它详细介绍了我们在 Entity Framework 团队中使用的基于 xUnit.net 的框架,以在中等信任度下执行代码。

            这里是它的用法示例。

            public class SomeTests : MarshalByRefObject
            {
                [PartialTrustFact]
                public void Partial_trust_test1()
                {
                    // Runs in medium trust
                }
            }
            
            // Or...
            
            [PartialTrustFixture]
            public class MoreTests : MarshalByRefObject
            {
                [Fact]
                public void Another_partial_trust_test()
                {
                    // Runs in medium trust
                }
            }
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2013-05-16
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多