zoukankan      html  css  js  c++  java
  • web.config customErrors无法处理的is not a valid virtual path

        前天用skipfish把网站扫描了一下,发现了一堆

    is not a valid virtual path错误,检查了一下,都是通过访问类似这样的url造成的:

    test.com/test.aspx/%3bskipfish.invalid%3b%3f

        仔细检查了一下,发现是pathinfo中包含“?”的转义符“%3f”造成的,在调用System.Web.VirtualPath.Create(String virtualPath, VirtualPathOptions options)方法时抛出的异常。

        看了一下VirtualPath的实现,发现存在以下无效字符都会被拒绝:

    char[] s_illegalVirtualPathChars = new char[] { ':', '?', '*', '\0' };

        试验了一下,其他字符都会在iis级别就被拒绝,可能iis也会处理这些字符;只有%3f会出现经典的asp.net黄色背景页面。

        以上这些字符都无法通过web.config中定义的customErrors节点处理,即使能处理也只有%3f能够处理,所以只能在global.asaxApplication_Error方法中处理,当然也可以通过注册HttpHandlerHttpModule来处理。

        前面这个问题是在asp.net 2.0(无论是经典模式还是集成模式)中出现的,在asp.net 4.0中也存在这些问题,只不过asp.net 4.0多了个url routing,所以情况又有所不同。

        asp.net 4.0中的无效字符貌似多了一些,引用http://msdn.microsoft.com/zh-cn/library/system.web.configuration.httpruntimesection.requestpathinvalidcharacters.aspx

    <,>,*,%,&,:,\,?

        网站运行在asp.net 4.0经典模式下的时候,都会由iis直接抛出错误。

        运行在asp.net 4.0集成模式下的时候,customErrors设置可以生效了,如果要避免以上字符抛出异常,则可以在web.config中设置如下:

    <pages validateRequest="false"></pages>

    <httpRuntime requestPathInvalidCharacters=""></httpRuntime>

        当然为了安全考虑,尽量不要这样去做。

        嗯嗯,貌似4.0的配置选项又多了好多,有时间得看看去,就这样了。

  • 相关阅读:
    WCF双工通讯以及客户端间的间接通讯
    认识IoC
    学习“迷你ASP.NET MVC框架”后的小结
    MVP的PV模式与SC模式
    Android学习笔记(九) 视图的应用布局效果
    C# 动态编译
    C#中协变与抗变(逆变)
    线程池ThreadPool的初探
    关于异步的初步认识
    仿Office的程序载入窗体
  • 原文地址:https://www.cnblogs.com/lwme/p/1885858.html
Copyright © 2011-2022 走看看