CNode

使用csurf时遇到的问题

Wwengqianshan发布于12 年前最后回复11 年前4 回复11743 浏览0 收藏

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

查看回复

回复 (4)

G
GuoZhang#1·12 年前

你说的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中查看代码。

W
wengqianshan#2·12 年前

@GuoZhang 多谢回复

C
cuoluanleshiguang#3·11 年前

请问 最后怎么解决的啊

W
wengqianshan#4·11 年前
引用 cuoluanleshiguang请问 最后怎么解决的啊

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

参与回复
登录后即可参与回复。登录