2

我正在使用.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")]

谢谢。

4

1 回答 1

1

我认为如果您当前的调用链还没有指定的访问权限,那么SecurityAction.Demand会引发安全异常。它不会更改您拥有的访问权限(因此它不会限制您可以写入哪些其他文件),但如果您无权访问指定的路径,您应该会看到安全异常。

根据您指定的内容,PermitOnly将是使用的正确值(它限制仅访问您指定的项目),所以我想知道您的注册表项代码是否是问题所在。一个典型的例子是 .NET 注册表类可用于以“只读”或“读写”方式打开密钥 - 如果您尝试以读写方式打开,即使您永远不要试图改变价值。

您可以将代码发布到您的注册表访问权限吗?

于 2010-03-11T12:10:09.000 回答