现在,我们每个会话都有 csrf 令牌。并使用隐藏字段添加此令牌 jsp。以下代码段每个会话仅提供一个:
token = (String) session.getAttribute(CSRF_TOKEN_FOR_SESSION_NAME);
if (null==token) {
token = UUID.randomUUID().toString();
session.setAttribute(CSRF_TOKEN_FOR_SESSION_NAME, token);
}
对于每一个请求,
//calls the above snippet and this time token will not be null
String st = CSRFTokenManager.getTokenForSession(request.getSession());
String rt = CSRFTokenManager.getTokenFromRequest(request);
在这里,usings 等于比较字符串并返回真或假。
我的问题是,如果我尝试为每个请求生成令牌而不从会话中获取令牌,会发生什么情况。在比较时,我会从会话中得到请求。这是个好主意还是遗漏了什么?
我将不使用上面的代码片段,而是使用以下代码
//for every request generate a new and set in session
token = UUID.randomUUID().toString();
session.setAttribute(CSRF_TOKEN_FOR_SESSION_NAME, token);
//get the token from session and request and compare
String st = (String) request.getSession().getAttribute("CSRF_TOKEN_FOR_SESSION_NAME");
String rt = CSRFTokenManager.getTokenFromRequest(request);