在部分信任环境中测试.NET代码

时间:2020-03-05 18:41:41  来源:igfitidea点击:

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

@尼克:感谢答复。 las,有问题的工具明确用于非托管代码。我没有在问题中说"托管",也不应该假设人们会从" .NET"标签推断出它。

解决方案

回答

使用Microsoft应用程序验证程序。

AppVerifier可帮助确定:

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

回答

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

我认为我处理此问题的方式可能与-

  • 使用AppDomain.CreateDomain()重载在我的TDD代码中创建一个AppDomain,该重载允许我们传递PermissionSet。 PermissionSet将被构造为匹配我们要测试的不同信任方案。
  • 将包含被测逻辑的程序集加载到应用程序域中
  • 在应用程序域中创建类型/调用方法等的实例,捕获安全异常

有点类似的东西。我还没有时间敲打概念证明。

回答

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

在"运行时安全策略"部分,我们将找到3个策略级别:企业,计算机和用户。如果我们深入研究"机器"或者"用户",则会发现"代码组"和"权限集"的定义。当我们说要在部分信任环境中测试某些.NET代码时,我想我们将要针对已定义的标准权限集之一进行测试,例如Internet。我们需要定义一个与应用程序(或者特定程序集)匹配的代码组,并将我们选择的权限集分配给该代码组。

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

选择我们希望新代码组存在于计算机范围内还是仅存在于用户帐户中,并相应地深入研究计算机或者用户策略级别。我们将看到一个名为_All _ Code_的代码组。右键单击并选择"新建...",在其中创建一个子代码组。

给它起一个名字,说PartialTrustGroup,然后单击Next。

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

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

现在,我们可以为新代码组选择一个权限集。现在,选择Internet。与Java applet沙箱类似,这是一个限制性设置。单击下一步,然后单击完成。

现在,右键单击新的代码组,然后选择"属性"。在"常规"选项卡中,确保选中最上方的复选框,然后单击"确定"。

现在,从指定URL下方位置加载的任何.NET程序集都将应用Internet权限集。如果我们没有编写代码来仔细观察减少的权限集,则期望获得一些SecurityExceptions。

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

回答

我们要寻找的功能已内置在visual studio中:

在项目的安全性选项卡上,有一个"高级..."按钮,可让我们配置是要完全信任还是以指定的信任级别进行调试。