【发布时间】:2011-01-26 08:21:58
【问题描述】:
我正在使用 .NET 3.5。假设我有一个访问特定文件和特定注册表项的方法。 我想添加限制该方法的声明性安全定义,使其只能访问指定的文件和注册表项,而不能访问其他任何内容。
当我尝试时:
[RegistryPermission(SecurityAction.PermitOnly, Read = "registry key path"]
[FileIOPermission(SecurityAction.PermitOnly, Read = "file path")]
...它让我可以读取文件路径,但不能读取注册表项 - 我遇到了安全异常。
如果我使用:
[RegistryPermission(SecurityAction.Demand, Read = "registry key path"]
[FileIOPermission(SecurityAction.Demand, Read = "file path")]
...它可以让我读取文件和注册表项,还可以让我访问其他文件。
我是否遗漏了一些关于如何使用这些方法来实现这种效果的内容?
编辑:
我用来访问注册表项的代码是:
RegistryKey rk = Registry.LocalMachine;
rk = rk.OpenSubKey("MyKey");
string registryVal = rk.GetValue("Test").ToString();
因此权限声明是:
[RegistryPermission(SecurityAction.PermitOnly, Read = @"HKEY_LOCAL_MACHINE\MyKey")]
谢谢。
【问题讨论】:
-
如果您的应用程序/AppDomain 在完全信任的情况下运行,这些属性将不起作用。您是否在部分信任下运行?
-
好吧,如果我在使用 PermitOnly 时尝试访问属性中未列出的文件,它肯定会失败。
标签: .net security permissions declarative-security