• 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的配置选项又多了好多,有时间得看看去,就这样了。

  • 相关阅读:
    [LeetCode] 44. Wildcard Matching
    [LeetCode] 1431. Kids With the Greatest Number of Candies
    [LeetCode] 47. Permutations II
    [LeetCode] 77. Combinations
    [LeetCode] 40. Combination Sum II
    [LeetCode] 39. Combination Sum
    [LeetCode] 213. House Robber II
    [LeetCode] 198. House Robber
    [LeetCode] 338. Counting Bits
    [LeetCode] 259. 3Sum Smaller
  • 原文地址:https://www.cnblogs.com/lwme/p/1885858.html
Copyright © 2020-2023  润新知