繁体   English   中英

以编程方式确定路径是否受限制

[英]Programmatically determine if path is restricted

我在ASP.NET 2中创建一个HttpModule。模块需要根据请求的路径是公共路径还是受保护路径执行不同的逻辑。 web.config使用<system.web><authorization>标记和几个<location>标记设置授权。

有没有办法让HttpModule判断出当前请求的路径是否受到保护? 我不想硬编码代码中的值。

如果您使用标准authentication/authorization则可以使用CheckUrlAccessForPrincipal

UrlAuthorizationModule.CheckUrlAccessForPrincipal(virtualPath, user, verb);

没有直接的方法来查看文件系统条目并获得它的有效权限。 计算文件或目录上的有效权限集是......复杂的(这将是一种礼貌的方式)。

看起来这将是System.IO类应该提供的相当明显的信息,但显然CLR团队并不这么认为。 我认为问题的一部分是固有的竞争条件。 给定对象的权限是动态的,可以随时改变。 它们甚至可以在您的权限检查和对象的实际访问之间进行更改,从而导致异常被引发。

这些问题有一些帮助:

最简单的方法是要求你想要的权限,如果你没有它们就捕获异常并使用它来返回bool是/否值:

// you'll need access to the namespace namespace System.Security.Permissions
public bool HasAccess( string path , FileIOPermissionAccess accessDesired )
{
  bool isGranted ;

  try
  {
    FileIOPermission permission = new FileIOPermission( accessDesired , path ) ;

    permission.Demand() ;

    isGranted = true ;

  }
  catch
  {
    isGranted = false ;
  }

  return isGranted ;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM