1

我正在使用 node.js 和 express 构建一个简单的服务器,其中 CSRF 正在通过 express 框架实现。

app.use(express.csrf()); 
app.use(function(req, res, next){
  res.locals.token = req.session._csrf;
  res.locals.year = new Date().getFullYear();
  next();
});

Connect CSRF 中间件自动生成 req.session._csrf 令牌,该函数将其映射到 res.locals.token 以便它可用于由 ejs 制作的模板。这适用于 Web 应用程序。

但是当涉及到我用android制作的移动应用程序时,例如登录,只发送没有CSRF令牌的用户名和密码会导致服务器拒绝请求。

由于前面的代码仅适用于 web 模板,所以我的问题是如何在启用 android 的应用程序中接收此令牌

最佳 rgds xi

4

1 回答 1

2

如果它只是您需要保护的登录页面,那么您可以轻松地首先为登录页面执行 GET(返回 JSON 或 XML)并以这种方式获取 CSRF 令牌。

但是,我认为 CSRF 对于移动设备来说不是问题。您可以做的是使用 cookiesession 中间件在会话上设置一个标志,以指示这种类型的客户端不需要 CSRF。

然后使用这个答案Disable csrf validation for some requests on Express来打开或关闭 CSRF,具体取决于该标志是否存在于 cookie 中。

或者,您的移动应用程序可以只向每个请求 url 添加一个标志,而不是使用 cookie 方法表明它不需要 CSRF。然而,这意味着如果黑客知道这个标志,他们可以绕过你的 CSRF 保护。

于 2013-07-17T07:34:29.517 回答