我如何逃脱/和asp.net中的其他角色?

2 asp.net url escaping

当我访问http://localhost:17357/u/a%2fa/m/ssd-10并查看HttpContext.Current.Request.UrlApplication_BeginRequest时,我看到了http://localhost:17357/u/a/a/m/ssd-10吗?我不应该得到http://localhost:17357/u/a%2fa/m/ssd-10?我认为逃避网址的重点是什么?,&,和其他特殊符号不要与网址中的特殊含义相混淆.也许我需要调整配置?


我创建了4个用户名,有

a?@!&ee
a?@!/&ee
as d
???
Run Code Online (Sandbox Code Playgroud)

链接为

<a href="/u/a%3f%40%21%26ee">a?@!&amp;ee</a><br>
<a href="/u/a%3f%40%21%2f%26ee">a?@!/&amp;ee</a><br>
<a href="/u/as%20d">as d</a><br>
<a href="/u/%ef%bd%b8%ef%bd%b2%ef%be%9d">???</a>
Run Code Online (Sandbox Code Playgroud)

最后两个工作,但前两个我得到了exceptio

A first chance exception of type 'System.ArgumentException' occurred in mscorlib.dll

Additional information: Illegal characters in path.
Run Code Online (Sandbox Code Playgroud)

然后

A first chance exception of type 'System.Web.HttpException' occurred in System.Web.dll

Additional information: '/u/a?@!&ee' is not a valid virtual path.
Run Code Online (Sandbox Code Playgroud)

我的页面说Bad Request.我如何允许这些用户名工作.如果不可能我怎么写一个解决方法?

jba*_*all 5

你需要再次逃脱它.用%252f而不是%2f.为了澄清,当服务器收到URL时,URL是未编码的.URL编码允许您传入/服务器处理的字符而不是保留字符通常会触发的特殊功能.有关详细信息,请参阅Wikipedia页面.

关于你的a?@!&ee用户名错误,你几乎可以肯定你遇到的问题是ASP.NET有特殊字符(甚至是urlencoded),它们不在查询字符串中(即?在URL 的一部分之后) .约书亚那根谈论它在一篇博客文章,并确定%,&,*,并:为存在问题的字符.

他指向一个Dirk.Net博客文章,提供了一些修复.首先,你可以编辑注册表,以允许受限制的字符(添加DWORD键AllowRestrictedChars,以HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters和其布尔值设置为true).或者,您可以确保拥有.NET framework 1.1 SP1并编辑注册表以将ASP.NET VErification Compatibility设置为true(DWORD HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET VerificationCompatibility = 1).第三,您可以尝试ValidateRequest在ASPX页面上设置为false.最后,正如Joshua决定做的那样,你可以使用查询字符串传递信息,即在?ASP.Net最初(预MVC)之后.