使用csurf与react-server

6
我希望在React服务器内作为express中间件添加csurf,用于通用应用程序。

我的目标是将csrf令牌添加到表单中的隐藏输入框中,以维护与服务器渲染的网站提供的相同的csrf保护流程,但是在SPA内。

这在React服务器内是否可行?如果可以,如何通过页面将可用于响应对象的csrf令牌传递给React组件(最好的方式)?

1个回答

2

我其实也遇到了同样的问题,幸运的是在这里找到了解决方案:https://github.com/kriasoft/react-starter-kit/issues/1142

使用方法如下:

app.use(csrf({ cookie: true, value: (req) => (req.cookies.csrfToken) }));

然后对于每个get请求,设置一个带有csrf令牌的cookie:

res.cookie('csrfToken', req.csrfToken ? req.csrfToken() : null, { sameSite: true, httpOnly: true }); 

谢谢你指出这个问题,它似乎是一个相当通用的解决方案,所以它也可能在React-Server上下文中起作用。 - feychu
我不明白这是什么意思。如果你在每个请求中自动设置令牌,而不从客户端接收它,那么它几乎没用。 - alex067
我认为自定义的 value 函数应该检查请求的正文或头部,而不是查看 cookie,这是根据 csurf 文档中的默认行为。否则,检查 cookie 会让服务器容易受到 CSRF 攻击,而你正试图防御它! - Kenna

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接