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

时间:2010-02-04 02:43:05

标签: asp.net url escaping

当我访问http://localhost:17357/u/a%2fa/m/ssd-10并查看Application_BeginRequest中的HttpContext.Current.Request.Url时,我会看到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
クイン

链接为

<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>

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

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

Additional information: Illegal characters in path.

然后

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.

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

2 个答案:

答案 0 :(得分:5)

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

关于使用a?@!&ee用户名的错误,几乎可以肯定您遇到的问题是ASP.NET具有不在查询字符串中的特殊字符(即使是urlencoded正确)(即,在URL的?部分之后)。 Joshua Flanagan谈到它in a blog post,并将%&*:标识为有问题的角色。

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

答案 1 :(得分:0)

我写了自己的解决方案。很高兴有一个用户名/但不考虑/在获得GET请求时。