【发布时间】:2012-02-27 05:32:23
【问题描述】:
我正忙于了解 c# 中的安全性内容,并且正在努力了解 Assert 的工作原理。我正在使用 .net 3.5。
我制作了一个示例应用程序来尝试解决这个问题。
调用方法:
[FileIOPermission(SecurityAction.Deny, ViewAndModify = @"C:\")]
static void Main(string[] args)
{
WriteTest testWriter = new WriteTest();
testWriter.Test();
Console.Read();
}
在一个单独的类库中我有:
public class WriteTest
{
public void Test()
{
try
{
FileIOPermission permission = new FileIOPermission(FileIOPermissionAccess.Write, @"C:\");
permission.Assert();
using (StreamWriter sw = new StreamWriter(@"C:\test.txt"))
{
sw.WriteLine("testing!");
sw.Flush();
}
Console.WriteLine("Writen to file!");
}
catch (SecurityException sec)
{
Console.WriteLine("No privileges!");
}
}
}
这段代码执行得很好。它将写入文件。我的问题是这到底是如何工作的?如果我可以断言我想要的权限以便它跳过检查,这不会使安全类无效吗?如果我将 Assert 更改为 Demand,则会引发异常。
安全类的重点是不允许我设置权限,以便当我调用第三方类时,我可以防止它变得流氓并做我不希望它做的事情?我知道如果我将 dll 加载到 AppDomain 中,即使第三方 DLL 确实使用 Assert,我也会得到这种效果,但如果我直接调用它会起作用,这似乎很奇怪。我已尝试阅读有关 Assert 的 MSDN 文档,但我发现它很难理解。
【问题讨论】:
-
确保您需要了解 .NET 4 之前的安全模型...因为 .NET 4.0 代码访问安全性已被简化。
标签: c# .net permissions code-access-security