我收到相当不言自明的错误:
检测到来自客户端 (*) 的潜在危险 Request.Path 值。
问题是由于请求 URL 中的 *
:
https://stackoverflow.com/Search/test*/0/1/10/1
此 url 用于填充搜索页面,其中“test*”是搜索词,url 的其余部分与各种其他过滤器相关。
有没有一种简单的方法可以在 URL 中允许这些特殊字符?我已尝试修改 web.config
,但无济于事。
我应该手动编码/解码特殊字符吗?或者是否有这样做的最佳实践,我想避免使用查询字符串。 - 但它可能是一种选择。
应用程序本身是一个 c# asp.net
网络表单应用程序,它使用路由来生成上面的漂亮 URL。
ValidateRequest=false
?
如果您使用的是 .NET 4.0,您应该能够通过 web.config 允许这些 url
<system.web>
<httpRuntime
requestPathInvalidCharacters="<,>,%,&,:,\,?" />
</system.web>
注意,我刚刚删除了星号(*),原来的默认字符串是:
<httpRuntime
requestPathInvalidCharacters="<,>,*,%,&,:,\,?" />
有关详细信息,请参阅 this question。
URL 的路径中不允许使用 *
字符,但在查询字符串中使用它没有问题:
http://localhost:3286/Search/?q=test*
这不是编码问题,*
字符在 URL 中没有特殊含义,因此 URL 是否对其进行编码并不重要。您需要使用不同的方案对其进行编码,然后对其进行解码。
例如使用任意字符作为转义字符:
query = query.Replace("x", "xxx").Replace("y", "xxy").Replace("*", "xyy");
和解码:
query = query.Replace("xyy", "*").Replace("xxy", "y").Replace("xxx", "x");
PATH
中使用它,而不是在查询字符串中。
aa
<=> a
和 ab
<=> *
作为更简单的编码方案?
对我来说,我正在使用 web api 2.0 处理 .net 4.5.2,我有同样的错误,我只是通过在 requestPathInvalidCharacters 中添加 requestPathInvalidCharacters="" 来设置它,你必须设置不允许的字符,否则你必须删除字符导致这个问题。
<system.web>
<httpRuntime targetFramework="4.5.2" requestPathInvalidCharacters="" />
<pages >
<namespaces>
....
</namespaces>
</pages>
</system.web>
**请注意,这不是一个好习惯,可能是带有此参数的帖子作为对象的属性更好,或者尝试对特殊字符进行编码。 -- 在搜索了rest api设计的最佳实践之后,我发现在搜索、排序和分页中,我们必须像这样处理查询参数
/companies?search=Digital%26Mckinsey
这解决了当我们编码 & 并将其替换为 %26 以任何方式在 url 上的问题时,在服务器上我们收到正确的参数 Digital&Mckinsey
此链接可能有助于设计 rest web api 的最佳实践https://hackernoon.com/restful-api-designing-guidelines-the-best-practices-60e1d954e7c9
您应该对路线值进行编码,然后(如果需要)在搜索之前解码该值。
对我来说,在输入 url 时,用户不小心使用了 / 而不是 ?启动查询参数
例如:
url.com/endpoint/parameter=SomeValue&otherparameter=Another+value
应该是:
url.com/endpoint?parameter=SomeValue&otherparameter=Another+value
这个异常发生在我的应用程序中,并且相当具有误导性。
当我使用 ajax 方法调用并传递 JSON 数组对象调用 .aspx 页面 Web 方法时,它被抛出。网页方法签名包含一个强类型的 .NET 对象数组 OrderDetails。 Actual_Qty 属性定义为 int,JSON 对象 Actual_Qty 属性包含“4”(额外的空格字符)。删除多余的空间后,转换成为可能,ajax 调用成功到达网页方法。
如果是 IIS Express,请尝试将 Web 项目的服务器属性设置为本地 IIS。确保项目 url 是否正确并创建虚拟目录。
在处理 Uniform Resource Locator(URL) 时,有一定的 syntax standards,在这种特殊情况下,我们正在处理 Reserved Characters。
直到 RFC 3986,保留字符可能(或可能不)被通用语法、每个特定于方案的语法或 URI 的解引用算法的特定于实现的语法定义为分隔符;并且星号(*)是保留字符。
最佳做法是在 URL 中使用 Unreserved Characters,或者您可以尝试对其进行编码。
继续挖掘:
HTML URL 编码参考 (w3schools)
何时编码或解码 (RFC 3986)
%25
而不是 %
,也会发生此错误,因此 IIS 可能会为完全有效的 URL 返回此错误。
我在 Azure 数据工厂中遇到了类似的问题,带有 : 字符。
我通过替换 : 解决了这个问题 %3A
如图 here。
例如,我替换了
date1=2020-01-25T00:00:00.000Z
和
date1=2020-01-25T00%3A00%3A00.000Z