Mic*_*lis 6 javascript api http csrf csrf-protection
我在使用Angular的网站上使用基于会话的CSRF。进行HTTP呼叫以要求CSRF令牌是否安全?
例如,如果我将具有有效用户会话的请求发送到了一个名为/ csrf / get的页面,并且该页面打印了原始令牌,那么对于CSRF功能而言,这是否足够安全?如果没有,在保持JSON检索功能的同时,我还能做些什么使其更安全?
这将是所有其他事情之前的第一个api调用,我将其保留在localstorage上,以在每个http调用中使用它
简而言之,没有。您尝试进行 CSRF 保护的方式将您暴露给 CSRF,因为您的csrf/get端点不受 CSRF 保护。
本质上,您需要保护自己免受两个主要攻击媒介的侵害:XSS 和 CSRF。
CSRF 涉及您的站点和一个恶意站点,该站点将尝试向您的站点发出经过身份验证的请求。如果有办法从恶意站点请求 CSRF 令牌,则您不受保护。防止 CSRF 的常用方法是从您的身份验证 API 调用中返回一个令牌,并将该令牌存储在浏览器会话中。这种方法的问题在于它会让您面临 XSS。
跨站点脚本或 XSS 漏洞与在您的页面上运行的外部脚本有关。这包括攻击者插入的潜在恶意脚本。
例如,本地存储和会话存储并不安全,因此您不应将令牌存储在常规 cookie 中。
避免 XSS 攻击您的身份验证响应可以存储 javascript 无法使用HttpOnlycookie读取的cookie。
因此,使用与 javascript 一起存储的令牌可以保护您免受 CSRF 的侵害,但会使您面临 XSS,其中使用会话 cookie 可以保护您免受 XSS 的侵害,但会使您面临 CSRF。
解决方案是使用这两种方法:您的身份验证 API 应该设置一个HttpOnlycookie 来防止 XSS,并且应该返回一个令牌来防止 CSRF。
请注意,不需要csrf/getapi,因为令牌应该由身份验证方法返回:您只想发送该令牌以交换有效凭据。记住还要在所有经过身份验证的 API 调用上发送和验证相同的令牌。
这是一篇很好的文章,解释了 API 安全性、为什么以及如何更详细地做到这一点:http : //www.redotheweb.com/2015/11/09/api-security.html
首先,使用https,http不安全。
那么,最好不要使用 GET。
安全的方法是在成功的身份验证请求 (POST) 响应中发送令牌。
欲了解更多信息,请检查:
https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)
https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)_Prevention_Cheat_Sheet