从客户端(*)检测到潜在危险的Request.Path值
我正在接受相当自我解释的错误:
客户端(*)检测到有潜在危险的Request.Path值。
问题是,我的url包含*:
https://stackoverflow.com/Search/test * / 0/1/10/1
此url用于填充search网页,其中“test *”是search字词,其余的url与各种其他过滤条件相关。
我的问题是,如果有一个简单的解决scheme,让我把这些特殊字符作为search条件?
我已经尝试在web.config中包含以下内容,但是如果显示错误消息,则不起作用。
我应该手动编码/解码的特殊字符?
有这样做的最佳做法吗? 我想尝试和避免使用查询string,但我想这是一个选项。
应用程序本身是ac#asp.net webforms应用程序,使用路由来产生上面的漂亮的URL。
在URL的path中不允许使用*
字符,但在查询string中使用它没有问题:
http://localhost:3286/Search/?q=test*
这不是一个编码问题, *
字符在URL中没有特殊的含义,所以不pipe你的URL是否被编码。 您需要使用不同的scheme对其进行编码,然后对其进行解码。
例如使用任意字符作为转义字符:
query = query.Replace("x", "xxx").Replace("y", "xxy").Replace("*", "xyy");
并解码:
query = query.Replace("xyy", "*").Replace("xxy", "y").Replace("xxx", "x");
如果你使用.NET 4.0,你应该可以通过web.config来允许这些URL
<system.web> <httpRuntime requestPathInvalidCharacters="<,>,%,&,:,\,?" /> </system.web>
注意,我刚删除了星号(*),原来的默认string是:
<httpRuntime requestPathInvalidCharacters="<,>,*,%,&,:,\,?" />
看到这个问题的更多细节。
您应该对路由值进行编码,然后(如果需要)在search之前解码该值。
这个例外发生在我的申请中,相当具有误导性。
当我使用ajax方法调用一个.aspx页面的Web方法时,抛出了一个JSON数组对象。 Web Page方法签名包含一个强types的.NET对象OrderDetails的数组。 Actual_Qty属性被定义为int,而JSON对象Actual_Qty属性包含“4”(多余的空格字符)。 删除多余的空间后,转换成为可能,通过ajax调用成功地达到了Web Page方法。
在处理统一资源定位符(URL)时,有一定的语法标准 ,在这种情况下,我们正在处理保留字符 。
直到RFC 3986 ,保留字符可能(或可能不)被通用语法,每种scheme特定的语法或URI的解引用algorithm的特定于实现的语法定义为分隔符; 星号(*)是保留字符。
最好的做法是在url中使用未保留的字符 ,或者您可以尝试使用java.net.URLEncoder
对其进行编码。
继续挖掘:
- 查询string参数的Java URL编码
- HTMLurl编码参考(w3schools)
- 何时编码或解码(RFC 3986)
- 如何从给定的URL提取参数
尝试将Web项目的服务器configuration为本地IIS,如果它是IIS Express的话。 确保项目url是否正确并创build虚拟目录。