【问题标题】:How to allow "potentially dangerous" parameter values?如何允许“潜在危险”的参数值?
【发布时间】:2017-05-09 11:48:39
【问题描述】:

我有一个 Web API 项目。我的端点之一允许进行字符串搜索,其中可能包含特殊字符。

[RoutePrefix("api/Search")]
[ValidateInput(false)] // this is *supposed* to allow us to search using "unsafe" characters, like %, & etc.
public class SearchController : ApiController
{
    ...
    [HttpGet]
    [Route("{searchValue}", Name = "GenericSearch")]
    public async Task<IHttpActionResult> Search(string searchValue)
    {
        ...
    }
}

当我打电话给api/Search/fred 时,它按预期工作。

当我拨打api/Search/fred%25 时,我收到此错误:

[HttpException (0x80004005): 检测到来自客户端 (%) 的潜在危险 Request.Path 值。] System.Web.HttpRequest.ValidateInputIfRequiredByConfig() +561 System.Web.PipelineStepManager.ValidateHelper(HttpContext 上下文) +54

尽管我的控制器用[ValidateInput(false)] 装饰,但根据我在其他地方找到的其他答案,我将requestValidationMode 添加到我的Web.config:

<system.web>
  ...
  <httpRuntime requestValidationMode="2.0" />
</system.web>

我还需要什么其他的秘密开关?

【问题讨论】:

  • 我很确定这仅适用于 MVC。但仅在我的手机 ATM 上。还会说,如果它不只是 MVC,那么您是否在方法上尝试过它而不是类?
  • 根据这个stackoverflow.com/questions/5967103/…的回答尝试把它放在查询字符串中
  • @AndrewHarris AFAIK,WebAPI 不是 MVC 的衍生产品,只是带有一些不同的控制器和其他东西吗?
  • @AndrewHarris 啊,酷。必须是螺栓固定的东西之一。很高兴知道,谢谢:)

标签: c# asp.net-web-api


【解决方案1】:

您在 httpRuntime 上缺少允许无效字符的属性。

<httpRuntime requestPathInvalidCharacters="" requestValidationMode="2.0" />

【讨论】:

  • 谢谢!有没有办法做到这一点,这样我就不会删除所有端点上的验证,只是我指定的那些? [ValidateInput(false)] 有什么作用吗?
  • 目前只在我的手机上给我一分钟
  • 找到它here:使用location 元素将设置限制为该路径下的url。如果你想更新你的答案,我会给你答案。
  • 对于那些感兴趣的人,[ValidateInput(false)] 没有任何作用。
  • 不错!很好的发现
猜你喜欢
  • 2011-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-07
  • 2010-12-25
  • 1970-01-01
  • 2013-04-17
  • 1970-01-01
相关资源
最近更新 更多