Url Encoded Asterisk
Url Encoded Asterisk
我收到了一个相当明确的错误信息:\n
\n检测到来自客户端的潜在危险的请求路径值(*)\n
\n这个问题是由请求URL中的*
引起的:\n
https://stackoverflow.com/Search/test*/0/1/10/1
\n这个URL用于填充一个搜索页面,其中\'test*\'是搜索词,其余的URL与其他各种过滤器相关。\n有没有一种简单的方法来允许URL中的这些特殊字符?我尝试修改web.config
,但没有成功。\n我应该手动编码/解码这些特殊字符吗?\n或者有没有一种最佳实践来做到这一点,我希望避免使用查询字符串,但这可能是一个选项。\n应用程序本身是一个使用路由来生成上述漂亮URL的
Url Encoded Asterisk问题的出现原因是在设计REST API时没有正确处理查询参数中的特殊字符。在查询参数中使用特殊字符,比如&符号,可能会导致URL解析错误。
解决方法是对查询参数进行URL编码,将特殊字符替换为对应的编码形式。例如,将&符号替换为%26。这样在服务器端接收到请求时,可以正确解析查询参数。
以下是一个示例的解决方法,通过在web.config文件中配置requestPathInvalidCharacters参数来设置不允许的字符或移除导致问题的字符:
....
需要注意的是,这种方法并不是一个好的实践,更好的方式是将查询参数作为对象的属性传递,或者对特殊字符进行编码。
在设计REST API的最佳实践中,可以参考以下链接:https://hackernoon.com/restful-api-designing-guidelines-the-best-practices-60e1d954e7c9。
在我的观点中,将保护措施放在代码中是一个好的实践,应该正确处理输入参数的合法性。
Url Encoded Asterisk是一个问题,即URL编码中出现的星号字符(*)无法在路径中使用,但在查询字符串中使用没有问题。这个问题的原因是星号在URL中没有特殊含义,所以无论是否对其进行URL编码都没有影响。要解决这个问题,需要使用不同的编码方案进行编码,然后解码。
例如,可以使用任意字符作为转义字符,进行编码:
query = query.Replace("x", "xxx").Replace("y", "xxy").Replace("*", "xyy");
然后进行解码:
query = query.Replace("xyy", "*").Replace("xxy", "y").Replace("xxx", "x");
这种编码方案非常巧妙。如果需要,可以进一步解释其背后的逻辑,以避免读者产生困惑。
某些情况下可以使用简单的编码方案aa
<=> a
和ab
<=> *
。另外,有人建议使用私用区字符来解决这个问题,这样会更安全。
另外,某些情况下了一个解决方案,即对参数进行Base64编码(在API中进行解码),这比自己实现替换算法要简单得多。
Url Encoded Asterisk问题的解决方案有多种,可以根据具体情况选择适合的方法。
Url Encoded Asterisk问题的出现原因是因为在ASP.NET MVC项目中,当接收到带有Url编码的星号(*)的请求时,会出现"Getting a potentially dangerous request.Path value was detected from the client"错误。解决方法是在web.config文件中配置
具体的解决步骤如下:
1. 打开web.config文件。
2. 在
3. 修改
4. 保存并关闭web.config文件。
在.NET 4.0中,可以使用以下代码来修改
需要注意的是,上述代码中的星号(*)已经被移除了。如果需要了解更多细节,可以参考这个问题。
如果想要在具体的控制器或动作中使用MVC属性来解决问题,可以参考这个答案中的方法。可以尝试使用<location path="my/path">元素来包裹需要允许的URL。关于如何在控制器或动作级别设置这个属性,可以提问一个新的问题。
总之,Url Encoded Asterisk问题的解决方法是修改web.config文件中