如何拒绝来自其他应用程序的HTTP POST请求?

时间:2019-01-02 08:54:47

标签: c# .net iis

我正在对.net IIS中托管的Web应用程序进行安全检查,我知道有可能通过HTTP Post方法从任何其他应用程序访问我的网页,我们需要拒绝这些请求通过HTTP POST方法,是否有任何可能的方法可以拒绝这一点?

从下面的代码示例'www.example.com'是我的网站,而'recepticle.aspx'是从其他Web应用程序访问的网页(例如:www .Hacker1.com),如何防止这种情况发生?

写在(www.Hacker1.com)上的代码

private static readonly HttpClient client = new HttpClient();
var content = new FormUrlEncodedContent(values);
var response = client.PostAsync("http://www.example.com/recepticle.aspx", content);
var responseString = await response.Content.ReadAsStringAsync();

我需要拒绝来自其他Web应用程序对我的网页的HTTP POST请求,但是我可以允许来自浏览器的请求

4 个答案:

答案 0 :(得分:1)

您只能拒绝所有人的POST请求-您不能选择性地拒绝他们。您将采取的任何保护措施(例如检查引荐来源)都可以轻松地模拟黑客站点。适当的保护将强制对用户进行身份验证,并且仅允许经过身份验证的用户提出此类请求。

I.E。拥有端点login.aspx-交换用户名/密码以获取身份验证cookie /令牌,而recepticle.aspx应检查是否存在身份验证cookie /令牌。

顺便说一句。身份验证主题很复杂,并且ASP.NET/IIS具有许多内置模板。仍然容易出错。因此,如果不确定,最好将身份验证委托给OAUTH /使用您信任的https://en.wikipedia.org/wiki/List_of_OAuth_providers

大提供商之一

答案 1 :(得分:0)

如果您只想基于请求中的任何参数(在您的情况下为HTTP verbs)来阻止请求,则可以轻松地通过this在IIS上进行操作

答案 2 :(得分:0)

您可以拒绝POST请求,但是没有明智的方式-不添加身份验证-即可知道这些请求来自哪个应用程序,这意味着您将无法仅允许来自客户端应用程序的POST请求,但没有其他人。

只需使用某种身份验证来正确保护端点即可。

如果仅应由您的应用程序访问您的端点,为什么首先要使它们可以公共访问?如果这是 same 应用程序,则只需直接调用函数即可。如果这是一个单独的应用程序,请使用防火墙规则以确保只能由本地主机(例如)访问。

答案 3 :(得分:-1)

您可以在Web配置中定义要授权的请求的特定来源。 您可以像这样

在Web配置中为您的应用程序定义http协议
<httpProtocol>
  <customHeaders>
    <add name="Access-Control-Allow-Origin" value="*" />
    <add name="Access-Control-Allow-Headers" value="Content-Type, Authorization, Set-Authorization" />
    <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
    <add name="Access-Control-Expose-Headers" value="Set-Authorization" />
  </customHeaders>
</httpProtocol>

这里的代码示例在原始值中包含*,这意味着它将允许所有应用程序请求,因此您必须在此处传递您的应用程序网址,而不是*。