我编写了一个流程图,帮助我了解如何在AJAX应用程序中防止CSRF。我过去在更标准的Web表单上成功使用了CSRF预防,但这是第一次真正需要在AJAX中工作。
我想我想得到关于逻辑是否有效的任何反馈,因为这将是一个高安全性的应用程序,需要在不超过30秒后超时,并且令牌需要针对每个请求进行不同而不是相反一整个会议。
答案 0 :(得分:0)
只要您的令牌值由具有128位熵的CSPRNG生成,这似乎很好。没有必要在客户端散列该值,尽管您可以使用SHA-2对服务器端的存储进行哈希处理,以防止任何暴露会损害现有的用户会话。
此外,我假设您的CSRF令牌与身份验证令牌不同 - 建议将这些令牌分开,因为您不想操纵并传递身份验证令牌。
为了进一步提高安全性,您可以检查并设置自定义AJAX标头,例如X-Requested-With
,因为在没有启用CORS的情况下,浏览器跨域无法传递此信息。
您也可以将此安全令牌包含在此标头中。 See this answer了解详情。