我忙于尝试理解c#中的安全性内容,并且很努力地看到Assert如何工作。我正在使用.net 3.5。在C中断言权限#
我做了一个示例应用程序,试图找出这一点。
调用方法:
[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,则会引发异常。
安全类的重点是不允许我设置权限,以便当我打电话给第三方课时,我可以防止它流氓并做我不想做的事情?我知道如果我在AppDomain中加载DLL,即使第三方DLL使用Assert,我也会得到这种效果,但如果我直接调用它,这似乎很奇怪。我试过阅读关于Assert的MSDN文档,但我发现很难理解。
请确保您需要了解.NET 4以前的安全模型...自.NET 4.0代码访问安全性已被简化。 – 2012-02-05 12:26:17