【问题标题】:Allow cross site post request on specific ASP.NET Core controller允许特定 ASP.NET Core 控制器上的跨站点发布请求
【发布时间】:2017-02-14 09:47:17
【问题描述】:
我正在为我的新 ASP.NET Core 应用程序使用一个复杂的模板。现在我想创建一个新的控制器来接收来自另一个外部服务器的 POST 请求。那没有用。我尝试了很多,直到我发现设置了一种机制,它只允许 POST 请求访问具有特定标头(X-XSRF-TOKEN)的控制器。这样做是为了防止跨站点请求伪造攻击。
然而,一个特定的控制器应该允许这样的请求,因为这个控制器不是从网页访问者浏览器中使用的。有没有办法注释控制器或任何其他方式来允许这个异常?
【问题讨论】:
标签:
c#
asp.net
asp.net-web-api
csrf
antiforgerytoken
【解决方案1】:
请注意,即使您不打算在浏览器中使用该控制器操作,如果可以通过 http 访问它,它也可能很容易受到 CSRF 的影响。例如,攻击者仍然可能创建一个流氓网页,如果您的一个用户访问该网页,该用户会向该操作发送请求。如果会话管理是基于 cookie 或等效的并且操作更改服务器状态,它仍然是一个可利用的漏洞。
因此,虽然您可以关闭 CSRF 保护,但您需要仔细考虑后果。
【解决方案2】:
我终于找到了答案,使用注解确实可以。只需使用 [IgnoreAntiforgeryTokenAttribute] 注释您的控制器或操作,整个 XSRF 机制就不会再打扰您的控制器了。