我正在对.net IIS中托管的Web应用程序进行安全检查,我知道有可能通过HTTP Post方法从任何其他应用程序访问我的网页,我们需要拒绝这些请求通过HTTP POST方法,是否有任何可能的方法可以拒绝这一点?
从下面的代码示例'www.example.com'是我的网站,而'recepticle.aspx'是从其他Web应用程序访问的网页(例如: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请求,但是我可以允许来自浏览器的请求
答案 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>
这里的代码示例在原始值中包含*,这意味着它将允许所有应用程序请求,因此您必须在此处传递您的应用程序网址,而不是*。