代码之家  ›  专栏  ›  技术社区  ›  AlfeG

以%20结尾的URL有问题

  •  14
  • AlfeG  · 技术社区  · 15 年前

    我有个大问题。Live中有一些设备发送URL“/更新”。这是那些设备的开发人员的错别字。在服务器日志中,它看起来像是“/updates+”。

    我有一个ManageURL重写模块,可以处理所有请求而不进行扩展。但此请求会导致httpexception:

    System.Web.HttpException:
    
    System.Web.HttpException
       at System.Web.Util.FileUtil.CheckSuspiciousPhysicalPath(String physicalPath)
       at System.Web.HttpContext.ValidatePath()
       at System.Web.HttpApplication.ValidatePathExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
       at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
    

    正如我在日志中看到的,URL重写模块甚至没有得到这个URL,所以我无法在那里修复它。

    有没有用ASP.NET处理这些URL的方法?

    4 回复  |  直到 13 年前
        1
  •  19
  •   Community pid    7 年前

    好的,这是一个旧线程,但我想添加一个适用于所有ASP.NET版本的可行解决方案。看看 this answer in a related thread . 基本上归结为注册活动 PreSendRequestHeaders 在里面 global.asax.cs .

    或者,在ASP.NET 4.0或更高版本上,使用 <httpRuntime relaxedUrlToFileSystemMapping="true" /> 在Web.CONFIG中。

        2
  •  1
  •   Community pid    7 年前

    根据 some ,这是在 System.Web.dll :

    internal static void CheckSuspiciousPhysicalPath(string physicalPath)
    {
      if (((physicalPath != null) && (physicalPath.Length > 0))
        && (Path.GetFullPath(physicalPath) != physicalPath))
      {
        throw new HttpException(0x194, "");
      }
    }
    

    我想你不能更改它,但是不能在IIS设置中禁用它吗?当然,这也会禁用所有其他检查…:

    或者写一些在上述代码之前运行的ISAPI过滤器?据介绍,编写自己的模块很容易 Handle URI hacking gracefully in ASP.NET .

    或者, create your own error page . 在这个页面中(就像上面的URI黑客链接中建议的那样),搜索特定的文本 exception.TargetSite.Name ,如 CheckSuspiciousPhysicalPath 如果找到(或总是)看 current.Request.RawUrl 或者像这样,清除错误并重定向到修复的URL?

        3
  •  1
  •   Cheeso    15 年前

    你可以运行一个URL重写isapi,比如 IIRF .

        4
  •  0
  •   Bostone    15 年前

    如果您可以访问代码,为什么不检查末尾的“+”并删除它呢?