当前位置: 首页 > 面试题库 >

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

杜君浩
2023-03-14
问题内容

我正在使用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,除了一小部分请求模式白名单,请遵循此答案中我关于条件日志记录中间件的示例(为方便起见,已在下面复制)。

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



 类似资料:
  • 问题内容: 我正在使用ngAnimate模块,但是所有我的,等等都受此影响,我想对某些选定的元素利用ngAnimate。为了提高性能以及某些元素的显示和隐藏速度非常快的错误。 谢谢。 问题答案: 只需将其添加到您的CSS中即可。最好是最后一条规则: 然后将其添加到要禁用的元素类中。例:

  • 问题内容: 我正在关注Django 1.3 Web开发。对于登录,我收到以下错误 这是我的settings.py随附的APPS。这正是书上所说的样子。 这本书说,它应该包含django.contrib.auth.views.login ..并且我将其包含在 和我的registration / login.html …复制自本书的副本。它应该做。 问题答案: 你需要将模板标记添加为Django模板中

  • 问题内容: 我在CSRF令牌方面遇到问题。当我提交表单时,正在生成一个新的表单,但是我想我正在生成两个不同的令牌,这有点困惑。还有一个名为的令牌,因此我在开发人员工具中看到了两个不同的cookie(XSRF- TOKEN和_csrf),发布后它们没有变化。 我想要做的是为每个帖子请求生成一个新令牌,并检查它是否有效。我知道为了安全起见应该这样做,但是我坚持了下来。 漫长的一天,我是Express和

  • 问题内容: 禁止(403)CSRF验证失败。请求中止。即使使用{%csrf_token%}我正在尝试在django中进行登录,但出现此错误,我检查了CSRF文档,但对我来说没有任何用处。 这是HTML: 就像你在上面看到的那样,我使用了{%csrf_token%},并且在已安装的应用程序中有“ django.middleware.csrf.CsrfViewMiddleware”。 我的看法是: 我

  • 问题内容: 我已在中注释掉了csrf处理器和中间件产品线 但是,当我使用Ajax发送请求时,Django仍然会响应“ csrf令牌不正确或丢失”,并且在将X-CSRFToken添加到标头后,请求将会成功。 这里发生了什么 ? 问题答案: 如果只需要一些视图而不使用CSRF,则可以使用@csrf_exempt:

  • 问题内容: 所以我想做些类似的事情: 当前需要一条路径,例如,如果我给出此路径,则它仅在我位于主页上时才起作用,因此并不是全部。 在普通的node.js中,就像在创建http服务器之后,在进行页面路由之前编写任何内容一样简单。 那么如何使用Express来做到这一点,最好的方法是什么? 问题答案: Express基于Connect中间件。 Express的路由功能由您的应用程序提供,您可以自由地将