asp.net 从客户端(*)检测到潜在危险的请求,路径值

oyjwcjzk  于 11个月前  发布在  .NET
关注(0)|答案(9)|浏览(119)

我收到了一个相当自我解释的错误:
从客户端(*)检测到潜在危险的Request.Path值。
问题是由于请求URL中的*

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

字符串
此url用于填充搜索页面,其中“test*”是搜索词,url的其余部分与各种其他过滤器相关。
有没有一个简单的方法来允许这些特殊字符在网址?我已经尝试修改web.config,没有用.
我应该手动编码/解码特殊字符吗?或者有一个最佳实践来做这件事,我想避免使用查询字符串。-但它可能是一个选项。
应用程序本身是一个c# asp.net webforms应用程序,它使用路由来生成上面的漂亮URL。

1wnzp6jl

1wnzp6jl1#

如果你使用的是.NET4.0,你应该能够通过web.config允许这些URL

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

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

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


请参阅this question了解更多详细信息。

1hdlvixo

1hdlvixo2#

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

tjvv9vkg

tjvv9vkg3#

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


这解决了当我们编码时的问题,并以任何方式将其替换到url上,在服务器上,我们收到正确的参数Digital&McKinsey
此链接可能有助于设计REST Web API https://hackernoon.com/restful-api-designing-guidelines-the-best-practices-60e1d954e7c9的最佳实践

jq6vz3qz

jq6vz3qz4#

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

rkkpypqq

rkkpypqq5#

对我来说,在键入URL时,一个用户不小心使用了/而不是?来启动查询参数
例如:
url.com/endpoint/parameter=SomeValue&otherparameter=Another+value
应该是:
url.com/endpoint?parameter=SomeValue&otherparameter=Another+value

mwg9r5ms

mwg9r5ms6#

这个例外发生在我的应用程序中,并且相当误导。
它是在我使用一个apache方法调用调用一个.aspx页面Web方法时抛出的,传递了一个JSON数组对象。Web Page方法签名包含一个强类型.NET对象的数组OrderDetails。Actual_Qty属性被定义为int,JSON对象Actual_Qty属性包含“4“(额外的空格字符)。在删除了额外的空格之后,转换就可以进行了,并且通过aplog调用成功地到达了Web Page方法。

7jmck4yq

7jmck4yq7#

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

jhkqcmku

jhkqcmku8#

在处理统一资源定位符(URL)时,存在某些syntax standards,在这种特定情况下,我们正在处理保留字符
直到RFC 3986,保留字符可以(也可以不)被定义为通用语法、每个模式特定语法或URI的解引用算法的实现特定语法的分隔符;星号(*)是保留字符。
最好的做法是在URL中使用非保留字符,或者您可以尝试对其进行编码。
继续挖:

kadbb459

kadbb4599#

我在Azure数据工厂中遇到了类似的问题,即:字符。
我通过用%3A替换:解决了问题
如图所示here
例如,我用

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

字符串

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

相关问题