如何使Web Api在ASP.NET中免受CSRF攻击?

时间:2017-08-16 15:07:54

标签: ajax asp.net-web-api csrf csrf-protection

考虑一个Web应用程序,它只包含前端的HTML和JS,并且与Web API进行通信。

我正在尝试保护我的应用程序免受CSRF攻击,因此我参考了this article

使用本文中的方法,我可以生成Anti CSRF令牌并将其传递给客户端。但是,这取决于在进行常规CRUD操作调用之前必须进行的第一次AJAX调用。

通过这种方法,我需要对一些事情以及一些替代方案(如果有的话)进行一些澄清。考虑一个客户端访问此Web应用程序(受基于AJAX的Anti CSRF令牌保护),并保持其会话打开,他访问一个恶意网站,该网站包含进行相同AJAX调用以获取CSRF令牌的页面(假设攻击者知道这个过程),我想他可以使用标头进行非预期的呼叫,从而导致攻击。

那么如何保护我的应用程序不受这些影响呢?

请提供更多有关此内容的详细信息,或者如果它具有误导性,请提供正确的详细信息,以便我能更好地解决这个问题。

2 个答案:

答案 0 :(得分:0)

首先,您应该使用与服务器的加密通信,以便攻击者无法读取任何标头数据。

如果您的攻击者使用与您相同的呼叫,他将无法猜出您在呼叫中使用的反XSRF令牌。每次调用API时都会生成一个新令牌。我希望这个页面可以帮助您了解一些细节:

https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)_Prevention_Cheat_Sheet

答案 1 :(得分:0)

我认为,如果我们使用基于令牌的身份验证,则客户端必须在每个请求中传递身份验证令牌。如果客户端不将其存储在浏览器缓存中,也不将其存储在localStorage中,则浏览器将不会在呼叫中自动发送令牌。而且,如果我们的服务收到任何没有身份验证令牌的请求,那么它将丢弃该请求。