Expressjs CSRF保护

问题描述

我正在实施csurf中间件软件以防止CSRF攻击。我不明白为什么我必须将生成的令牌存储在cookie中:

csurf({ cookie: {
    sameSite: true,httpOnly: true
}})

当我可以在一个隐藏的输入中呈现该值,然后在POST请求的有效负载中将其接收回来时。

res.render("registration",{csrftoken: req.csrftoken()});
<input type="hidden" name="_csrf" value="{{csrftoken}}">

解决方法

使用cookie可以使CSRF用于JavaScript实现(即,如果您使用React或Angular或Vue,则可以从cookie中读取CSRF值并将其作为请求参数或标头发送回去。)>