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

本文关键字:是否 路径 编程 方式确 | 更新日期: 2023-09-27 18:07:55

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

是否有一种方法可以让HttpModule弄清楚当前请求的路径是否受到保护?我不想硬编码代码中的值

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

如果你使用的是标准的authentication/authorization,那么你可以使用CheckUrlAccessForPrincipal

UrlAuthorizationModule.CheckUrlAccessForPrincipal(virtualPath, user, verb);

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

似乎这将是一个相当明显的信息,系统。IO类应该提供的功能,但显然CLR团队不这么认为。我认为部分问题在于固有的竞争条件。给定对象上的权限是动态的,可以随时更改。它们甚至可能在您的权限检查和对象的实际访问之间发生变化,从而引发异常。

这些问题有一些帮助:

  • windows中有效的文件权限工具's api
  • 你怎么能很容易地检查访问是否被拒绝了一个文件在。net ?

最简单的方法是要求你想要的权限,如果你没有,捕获异常,并使用它返回一个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 ;
}