我正在创建一个带有Node.js后端的React Js网站。我一直在尝试找出一种用户身份验证实施方案来防止CSRF攻击,但是我对在哪里存储Anti-CSRF令牌感到困惑。
我对安全实施的思考过程如下...
我认为当用户需要请求信息时,客户端可以通过标头或有效负载发送JWT(反CSRF令牌),并且由于它是cookie,因此会话ID将自动发送。然后,服务器可以检查会话存储中是否存在JWT(反CSRF令牌)。
我知道JWT(反CSRF令牌)将需要在某个时候刷新。
我的困惑是由于在客户端存储了JWT(反CSRF令牌)。我一直在阅读它应该只存储在服务器上。但是,如果仅将其存储在服务器上,那么它似乎根本不做任何事情。
我考虑同时使用cookie和localStorage,因为似乎到服务器的请求既需要HttpOnly cookie,又需要来自localStorage的东西才能发送回“授权”响应,则攻击者既需要成功进行会话,又需要成功实施XSS攻击以获得Anti-CSRF令牌。
我最近才刚刚开始学习CSRF和XSS,所以我可能完全错了,我的实现中可能存在一个巨大的缺陷,我很想念。但是我的主要问题是...不需要在客户端和服务器上存储反CSRF令牌吗?
答案 0 :(得分:0)
它们也称为“ CSRF令牌”。当客户请求表格时(例如银行登录页面),服务器会生成令牌并将其传递给客户,当客户填写表格时,客户会将CSRF令牌与填写好的表格一起传递。服务器验证令牌值,如果匹配,则请求得到满足。 CSRF令牌以同步器令牌模式存储在服务器端。