考虑一个Web应用程序,它只包含前端的HTML和JS,并且与Web API进行通信。
我正在尝试保护我的应用程序免受CSRF攻击,因此我参考了this article。
使用本文中的方法,我可以生成Anti CSRF令牌并将其传递给客户端。但是,这取决于在进行常规CRUD操作调用之前必须进行的第一次AJAX调用。
通过这种方法,我需要对一些事情以及一些替代方案(如果有的话)进行一些澄清。考虑一个客户端访问此Web应用程序(受基于AJAX的Anti CSRF令牌保护),并保持其会话打开,他访问一个恶意网站,该网站包含进行相同AJAX调用以获取CSRF令牌的页面(假设攻击者知道这个过程),我想他可以使用标头进行非预期的呼叫,从而导致攻击。
那么如何保护我的应用程序不受这些影响呢?
请提供更多有关此内容的详细信息,或者如果它具有误导性,请提供正确的详细信息,以便我能更好地解决这个问题。
答案 0 :(得分:0)
首先,您应该使用与服务器的加密通信,以便攻击者无法读取任何标头数据。
如果您的攻击者使用与您相同的呼叫,他将无法猜出您在呼叫中使用的反XSRF令牌。每次调用API时都会生成一个新令牌。我希望这个页面可以帮助您了解一些细节:
https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)_Prevention_Cheat_Sheet
答案 1 :(得分:0)
我认为,如果我们使用基于令牌的身份验证,则客户端必须在每个请求中传递身份验证令牌。如果客户端不将其存储在浏览器缓存中,也不将其存储在localStorage中,则浏览器将不会在呼叫中自动发送令牌。而且,如果我们的服务收到任何没有身份验证令牌的请求,那么它将丢弃该请求。