代码访问安全是一个笑话?

smw*_*dia 7 .net security clr code-access-security

我刚刚阅读了有关代码访问安全性的这篇文章.它有这样一个例子:

using System.Security.Permissions;
public class MyFileAccessor 
{
  public MyFileAccessor(String path, bool readOnly)
  {
    path = MakeFullPath(path); // helper fcn
    FileIOPermissionAccess desiredAccess = readOnly
      ? FileIOPermissionAccess.Read
      : FileIOPermissionAccess.AllAccess;
    FileIOPermission p = new FileIOPermission(desiredAccess, path);
    p.Demand();
    // 
    ••• 
    open the file
   }
   // •••
}
Run Code Online (Sandbox Code Playgroud)

如果我没有使用FileIOPermissionAccess类型并且在我的代码中从不包含像p.Demand()这样的代码怎么办?换句话说,如果我想做坏事,我为什么要费心去做那个? 这不是一个笑话吗?或者我错了吗?

Han*_*ant 7

嗯,是的,这个例子有点儿玩笑,你自己永远不会写这样的东西.缺少的是真正重要的部分,//打开文件的代码.例如,它的现实版本会调用CreateFile().

关键是Windows对CAS一无所知.因此,如果您提供这样的实用程序功能并且您想要强制执行CAS规则,那么您必须验证您的调用代码是否具有所需的权限.当然,这种代码实际上只属于.NET框架.看看FileStream.Init()并注意在CreateFile调用之前需要FileIOPermission.