node.js - 对 Express 上的某些请求禁用 csrf 验证

标签 node.js express csrf

我正在使用 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 路由。

最佳答案

有几种可能的方法。你基本上需要了解什么是最简单最正确的规则来决定是否使用 csrf 中间件。如果您大部分时间都需要 csrf,除了请求模式的小白名单,请遵循 this answer I have about conditional logging middleware 中的示例(为方便起见,复制如下)。

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())。您只想找到一种表达方式,以便在使用或不使用中间件时使其干净。

关于node.js - 对 Express 上的某些请求禁用 csrf 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13516898/

相关文章:

node.js - 通过语音 channel 播放音频的问题;音频被截断并且每个文件逐渐延迟

javascript - Express Router Regex - 如何匹配包含连字符的字符串文字?

Spring security 3.2.0 RC1 csrf 与多部分/表单数据

ruby-on-rails - Rails CSRF token 真实性和设计

node.js - 从 MEAN 堆栈开始,只是咕哝

node.js - 如何验证cheerio是否找不到元素?

javascript - 将 html2pdf 生成的 pdf 发送回服务器

javascript - 在 Node exec 回调响应中无法正常工作

javascript - 无法读取未定义的属性 'isLoggedIn'

javascript - NodeJS 在运行时添加/删除/重新加载需要无需重新启动服务器(也不需要 nodemon)