ChatGPT解决这个技术问题 Extra ChatGPT

从客户端检测到潜在危险的 Request.Path 值 (*)

我收到相当不言自明的错误:

检测到来自客户端 (*) 的潜在危险 Request.Path 值。

问题是由于请求 URL 中的 *

https://stackoverflow.com/Search/test*/0/1/10/1

此 url 用于填充搜索页面,其中“test*”是搜索词,url 的其余部分与各种其他过滤器相关。

有没有一种简单的方法可以在 URL 中允许这些特殊字符?我已尝试修改 web.config,但无济于事。

我应该手动编码/解码特殊字符吗?或者是否有这样做的最佳实践,我想避免使用查询字符串。 - 但它可能是一种选择。

应用程序本身是一个 c# asp.net 网络表单应用程序,它使用路由来生成上面的漂亮 URL。

您的页面顶部是否有 ValidateRequest=false
我不知道该网站出于什么原因在内部尝试重定向,该重定向正在创建一个类似“localhost/://localhost/myWebsiteName”的 URL,这给了我同样的错误。我不知道为什么 ASP.net 管道认为它是一个危险的请求 URL。

Ω
ΩmegaMan

如果您使用的是 .NET 4.0,您应该能够通过 web.config 允许这些 url

<system.web>
    <httpRuntime 
            requestPathInvalidCharacters="&lt;,&gt;,%,&amp;,:,\,?" />
</system.web>

注意,我刚刚删除了星号(*),原来的默认字符串是:

<httpRuntime 
          requestPathInvalidCharacters="&lt;,&gt;,*,%,&amp;,:,\,?" />

有关详细信息,请参阅 this question


有什么方法可以在操作上使用 mvc 属性,这样我就不必为整个应用程序关闭它?与此处的答案类似:stackoverflow.com/a/1540976/298758
@longda:也许尝试用 您需要的 url 元素包装它。从全局角度来看,使用反射会相当简单,但我不确定是否在每个控制器/动作的基础上设置它。也许开始一个问题?
它只是不适用于 ASP.net MVC 项目,接收运行过程以确定 viewStart 中的布局得到了这个错误:路径中的非法字符。
默认列表等在此处描述:docs.microsoft.com/en-us/dotnet/api/…
G
Guffa

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");

“xxx”“xxy”“xyy”游戏非常聪明。您可能需要详细说明其背后的逻辑,以免使读者感到困惑。
请求是在 PATH 中使用它,而不是在查询字符串中。
我遇到了相同的情况,其中我的参数之一是 URL。即使正确编码 URL,我也会收到此错误。我最后只是对参数进行了 base64 编码(并在我的 api 中解码),这比试图弄清楚发生了什么要容易得多。实施您自己的替换例程可能是一个更好的选择。
你不能用 aa <=> aab <=> * 作为更简单的编码方案?
现在这救了我,谢谢,但我想在适当的时候检查这个建议:stackoverflow.com/a/603962/1830909,如果听到你的想法,我会很高兴。
M
MNF

对我来说,我正在使用 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


我认为实际上这样做是一个很好的做法。对格式错误的输入的保护应该在代码中。
T
Tejs

您应该对路线值进行编码,然后(如果需要)在搜索之前解码该值。


感谢您的答复。您的意思是有效地对 * 等项目进行替换,然后在您阅读时将其替换回来?
你能展示一个编码和解码值的代码示例吗?
t
trykyn

对我来说,在输入 url 时,用户不小心使用了 / 而不是 ?启动查询参数

例如:

url.com/endpoint/parameter=SomeValue&otherparameter=Another+value

应该是:

url.com/endpoint?parameter=SomeValue&otherparameter=Another+value


是的,对我来说也是一样的 url.com/endpoint¶meter=SomeValue&otherparameter=AnotherValue
B
Bertha

这个异常发生在我的应用程序中,并且相当具有误导性。

当我使用 ajax 方法调用并传递 JSON 数组对象调用 .aspx 页面 Web 方法时,它被抛出。网页方法签名包含一个强类型的 .NET 对象数组 OrderDetails。 Actual_Qty 属性定义为 int,JSON 对象 Actual_Qty 属性包含“4”(额外的空格字符)。删除多余的空间后,转换成为可能,ajax 调用成功到达网页方法。


B
Burk

如果是 IIS Express,请尝试将 Web 项目的服务器属性设置为本地 IIS。确保项目 url 是否正确并创建虚拟目录。


C
Community

在处理 Uniform Resource Locator(URL) 时,有一定的 syntax standards,在这种特殊情况下,我们正在处理 Reserved Characters

直到 RFC 3986,保留字符可能(或可能不)被通用语法、每个特定于方案的语法或 URI 的解引用算法的特定于实现的语法定义为分隔符;并且星号(*)是保留字符。

最佳做法是在 URL 中使用 Unreserved Characters,或者您可以尝试对其进行编码。

继续挖掘:

HTML URL 编码参考 (w3schools)

何时编码或解码 (RFC 3986)


如果 URL 中的保留字符是百分比编码的,例如 %25 而不是 %,也会发生此错误,因此 IIS 可能会为完全有效的 URL 返回此错误。
j
jeppoo1

我在 Azure 数据工厂中遇到了类似的问题,带有 : 字符。

我通过替换 : 解决了这个问题 %3A

如图 here

例如,我替换了

date1=2020-01-25T00:00:00.000Z

date1=2020-01-25T00%3A00%3A00.000Z

关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅