c# - 为什么 CASPol 允许我的 .NET 应用程序运行?

标签 c# security

很想知道为什么我限制了分配给程序集的权限时允许我的 2.0 .net 应用程序执行。

我在企业级别创建了一个新的代码组,它将匹配具有特定数字签名的任何程序集。代码组已设置为仅使用关联权限集中的权限,并且不会评估较低的策略级别。

运行 .Net 2.0 PermCalc 表明我的应用程序需要以下权限:

  • 非托管代码,
  • 环境
  • 文件输入输出
  • 注册表
  • 反射(reflection)

我已经为我的自定义代码组分配了非托管代码的权限,但没有其他权限。

我的应用程序中的第一个方法需要预先获得上述所有权限,以便我可以在退出前向用户显示一条明智的消息。

在我的程序集上运行 .NET 2.0 配置“评估程序集”工具确实表明我的应用程序将只获得 UnmanagedCode 权限。

但是,当我执行我的应用程序时,它会运行并完成,很明显会执行各种文件 IO 和注册表操作。

我的应用程序使用应与受限代码组匹配的数字签名进行签名。

谁能解释一下为什么会这样。

注意:我的最终目标是确保我的应用程序在从网络共享执行时不会严重崩溃。我本来想检查程序集证据区域是 My_Computer,但我不能再使用 .NET 3.5 SP1 执行此操作。参见 FullTrust On the LocalIntranet

在此先感谢您的任何帮助/建议。

最佳答案

如果您已正确配置 CAS 策略,那么您的应用程序很可能不会被拒绝您期望的权限,因为它不是在您配置其策略的 CLR 下运行。您是否可能在同一台机器上安装了 32 位和 64 位 CLR?

另一种可能是您的“提前检查”要求放错了地方。是直接在应用程序的 Main 方法中吗?如果是这样,当需求运行时,调用堆栈上将不会有任何应用程序代码经过验证。如果这是问题所在,只需将需求转移到从 Main 调用的另一个方法中,就应该允许需求失败。

关于c# - 为什么 CASPol 允许我的 .NET 应用程序运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6814661/

相关文章:

c# - 多线程——程序结束时的清理策略

c# - 如何约束多个泛型类型?

php和mysql登录脚本错误

security - 适用于 Windows、Linux、Google Apps、Web Apps 的集中身份验证

security - 为什么使用具有 CBC 模式的非随机 IV 会存在漏洞?

c# - 如何将波斯日历日期字符串转换为 DateTime?

c# - 学习如何在 C# 中开发日程/约会系统的资源?

c# - 将 KeyUp 作为参数传递 WPF 命令绑定(bind)文本框

python - 如何防止打印 fixture 的值?

php - 保护 PHP 应用程序的安全