使用csurf时遇到的问题
发布于 10 年前 作者 wengqianshan 10798 次浏览 最后一次编辑是 8 年前

在使用csurf时,正常的表单都没有问题,但是如果是上传表单就会403,网上都搜过都没找到解决方案。 有同学遇到类似问题吗,或者有没有其他替代方案?

4 回复

你说的403是指 invalid csrf token 吗? 如果是,这表示表单提交的csrfToken和期望的csrfToken不匹配。

// check user-submitted value
if (!tokens.verify(secret, value(req))) {
    var err = new Error('invalid csrf token');
          err.status = 403;
    next(err);
    return;
 }

Expressjs的csurf中间件缺省这样提取csrfToken:

function defaultValue(req) {
  return (req.body && req.body._csrf)   // POST  _csrf字段
    || (req.query && req.query._csrf)      // GET _csrf字段
    || (req.headers['x-csrf-token'])       // 扩展的x-csrf-token或x-xsrf-token请求头
    || (req.headers['x-xsrf-token']);
}

比较怪异的是:即使表单的enctype设置为multipart/form-data, 也不会影响这些字段的提交。 如果还不能找到原因,估计可行的方法就是到node_modules/csurf/index.js中查看代码。

请问 最后怎么解决的啊

@cuoluanleshiguang 上传中间件放到csrf前面,

回到顶部