我正在使用.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")]
感谢。
答案 0 :(得分:1)
我认为如果当前的调用链尚未具有指定的访问权限,SecurityAction.Demand
所做的就是抛出安全性异常。它不会更改您的访问权限(因此不会限制您可以写入的其他文件),但如果您无权访问指定的路径,则会看到安全性异常。
根据您的指定,PermitOnly
将是正确使用的值(它限制只访问您指定的项目),因此我想知道您的注册表键代码是否存在问题所在。一个典型的例子是.NET注册表类可以用来打开一个“只读”或“读写”的键 - 如果你试图打开读写,即使你有一个安全例外永远不要试图改变价值。
您可以将代码发布到您的注册表访问中吗?