在Node.js中渲染json时,CSRF令牌不匹配

我正在使用lusca来处理我的应用程序的csrf攻击。 在我的快速应用程序,当我呈现一个HTML页面,并通过_csrf令牌放置在一个隐藏的input一切都是正确的,因为lusca检查html _csrf令牌,并find匹配。

我的控制器:

response.render("root/home", { _csrf: response.locals._csrf }); 

我的html页面:

 <input type="hidden" name="_csrf" value="{{_csrf}}" /> 

但是当我想导出一个POST请求的JSON响应,我不能发送我的_csrf令牌,所以lusca无法find匹配(我认为问题在这里),并给我这个错误:

错误:CSRF令牌不匹配

我的控制器:

 response.json({ status: "success" }); 

更新:

csrf的秘密 (不是令牌,介意你)正在重新生成或删除初始GETPOST之间的一段时间。 唯一可行的方法是在会话中存储为_csrfSecret的值在请求之间被更改或删除。 确保你的会议正常工作。 从这个来源

但我仍然无法find解决scheme!

更新2:

我们有两个策略来生成csrf令牌… 每个会话每个请求 。 在我的应用程序令牌生成每个请求。 问题是当我第一次请求新的令牌时会产生秘密。 这意味着新的令牌和秘密相匹配。 但当我保存令牌,并发送一个AJAX请求(在标题或正文); 这ajax请求使旧的秘密过期,并将生成一个新的。 所以我的令牌不符合它。

Interesting Posts