无法使用https:403禁止使用lusca CSRF

时间:2017-09-29 15:48:04

标签: node.js session cookies csrf

这让我疯了。我试过阅读lusca source code,但发现很难理解。

检查了几个例子,但由于每个配置都不同,我唯一的调试输出是两个要比较的字符串,我最好请求一些帮助!

这是代码服务器端:

app.use([
cookieParser(process.env.SESSION_SECRET),
session({
  resave: false,
  saveUninitialized: true,
  secret: process.env.SESSION_SECRET,
  store: new MongoStore({ url: MONGO_URL, autoReconnect: true }),
  cookie: {
    secure: process.env.NODE_ENV === 'production'
  },
}), lusca({
  csrf: true,
  xframe: 'SAMEORIGIN',
  xssProtection: true,
})]);

从客户端,我发送带有POST标头的Ajax x-csrf-token:l0gH3xmssge53E/p2NsJ4dGnHaSLdPeZ+bEWs=请求:

fetch(url, {
  method: 'POST',
  credentials: 'include',
  headers: {
    'x-csrf-token': CSRF_TOKEN
  }
});

疯狂的是,它在本地工作,但是当我https production时,我收到403 Forbidden错误消息。

以下是我使用的版本:

"cookie-parser": "1.4.3",
"express-session": "1.15.3",
"lusca": "1.5.1",

我也从express/session doc

中读到了这个
  

注意从1.5.0版开始,不再需要使用cookie解析器中间件来使该模块工作。

但就我而言,我需要存储一些持久的用户ID(比会话长)。我需要使用cookies,对吗?

我想更好地理解整个会话/ cookie的事情,但直到现在我还没有找到任何有用的资源。

谢谢!

1 个答案:

答案 0 :(得分:0)

如果您在代理服务器后面运行Node.js服务器,则需要将Traceback (most recent call last): File "visualizingdata.py", line 12, in <module> x.append(int(row[0])) ValueError: invalid literal for int() with base 10: 'Time' 设置为true:

trust proxy

查看此堆栈溢出answer。另请参阅Express behind proxies上的此页面。