防止“潜在危险的请求”.在Web API中



我有这个控制器。

    public string Status([FromBody]StatusRequest p)
    {
        string ps= HttpContext.Current.Request["params"];
        return ps;
    }

它接收此帖子参数值(值为xml。下方只是其中的一部分(:

params=<Transaction hash=9

我遇到了这个臭名昭著的错误:

潜在的危险请求。从客户端检测到形式值

我尝试了一些解决方案。我试图绑定帖子参数。但是没有运气,它不会绑定它,因此" p"的值始终为null。

我尝试在控制器所在的目录中设置web.config:

    <?xml version="1.0"?>
<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0" />
    <httpRuntime targetFramework="4.5" requestPathInvalidCharacters="?" />
    <pages validateRequest="false" />
  </system.web>
</configuration>

这些配置对目录内的文件没有影响。

有人知道如何解决这个问题吗?

这确实是令人讨厌的例外,因为它揭示了服务器标题,即使您隐藏了它,所以大坏人可以对您使用该信息。

我找到了两种帮助我的解决方案。让我通过使用星号作为危险符号的示例来解释两者(但是您可以以这种方式处理任何单个符号或一组符号(

1st Way 真的很丑陋,我不推荐给任何人。但这是:

添加到global.asax.cs代码

protected void Application_Error(object sender, EventArgs e)
{
    if(Context.Request.RawUrl.Contains("*"))
    {
        Server.ClearError();
    }
}
protected void Application_BeginRequest(object sender, EventArgs e)
{
    if(!Context.Request.RawUrl.Contains("*"))
    {
        return;
    }
    var newPath = Context.Request.RawUrl.Replace("*", "");
    base.Context.RewritePath(newPath);
}

就是这样。对于任何带有星号的URL,您都会忽略这个烦人的例外,只需将危险符号替换为您想要的任何东西。

2nd Way 稍微棘手,但就我而言,好多了。请记住,如果您没有可能为IIS安装URL重写模块,则无法使用它。检查下一篇文章以获取详细信息。文章有点过时,如果您像我一样使用IIS 10,则需要在此处获取URL重写模块。

因此,首先您必须安装此模块。之后,将此部分添加到system.webServer中的Web配置文件:

 <rewrite>
      <rules>
        <rule name="Rewrite URL to remove asterisk from path.">
          <match url="^(.*)*(.*)$" />
          <conditions logicalGrouping="MatchAny" />
          <action type="Rewrite"
                  url="{R:1}{R:2}" />
        </rule>
      </rules>
    </rewrite>

仅此而已。现在几乎与星号的任何畸形URL都可以使用而不会出现此烦人的错误。

为什么几乎?因为如果危险符号以iis虚拟目录的名义出现。

,您仍然会得到异常。

因此,这两种方式都处理错误,例如http://localhost/webapplication1/api*/values

和这两种方式都以URL失败,例如http://localhost/webapplication1*/api/values

只需在web.config

下从请求pathinvalidcharacter中删除星号
...
<system.web>
        <httpRuntime requestPathInvalidCharacters="&lt;,&gt;,*,%,&amp;,:,,?" />
...

最新更新