一尘不染

对Express上的某些请求禁用CSRF验证

node.js

我正在使用Express框架使用Node.js编写一个小型Web应用程序。我正在使用csrf中间件,但是我想对某些请求禁用它。这就是我在应用程序中添加它的方式:

var express = require('express');
var app = express();

app.use(express.bodyParser());
app.use(express.cookieParser());
app.use(express.cookieSession({secret: 'secret'}));
app.use(express.csrf());

我想设置没有csrf控件的POST路由。


阅读 237

收藏
2020-07-07

共1个答案

一尘不染

有几种可能的方法。您基本上需要了解最简单和最正确的规则,以便决定是否使用csrf中间件。如果您大部分时间都希望使用csrf,除了一小部分请求模式白名单,请遵循此答案中我关于条件日志记录中间件的示例(为方便起见,已在下面复制)。

var express = require("express");
var csrf = express.csrf();
var app = express.createServer();

var conditionalCSRF = function (req, res, next) {
  //compute needCSRF here as appropriate based on req.path or whatever
  if (needCSRF) {
    csrf(req, res, next);
  } else {
    next();
  }
}

app.use(conditionalCSRF);
app.listen(3456);

另一种方法可能只是在诸如的特定路径上使用中间件app.post('/forms/*', express.csrf())。您只想找到一种表达方式,使其在使用或不使用中间件时变得干净。

2020-07-07