gpt4 book ai didi

node.js - expressjs、nginx 代理、csurf 和安全 cookie 不起作用

转载 作者:太空宇宙 更新时间:2023-11-03 23:20:01 25 4
gpt4 key购买 nike

我有一个 Express 站点在带有 nginx 的代理后面运行,在我的本地开发计算机上,关于使用 csurf 和不安全 cookie 的 csrf 保护,一切都运行良好。

此后我已转移到具有 SSL 证书的临时站点。现在我正在使用 SSL,我想启用安全 cookie。但是,现在每当我提交表单时,csurf 总是会出现无效 csrf token 的错误。

我像这样设置我的快速 session :

app.set('trust proxy', 1)
app.use(session({secret:'secret' , resave:false,proxy:true, saveUninitialized:false, store:sessionStore, rolling:true, cookie:{secure:true}}))
//...other setup lines
let csrf = csurf()
app.use(csrf)

我的 nginx 设置如下:

        proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header x-forwarded-proto https;
proxy_cache_bypass $http_upgrade;

据我从文档中可以看出,这应该没问题。我的网络应用程序是从 GCP 运行的,但我认为这不会有任何区别。

我已经尝试清除我的机器上的 cookie 等,以防某些内容缓存在某处,但它仍然无法工作。返回到 secure:false 修复了该问题。

我有一个捕获所有 app.post 路由处理程序来验证 csrf token ,因为页面上有多个表单,并且在该路由触发后创建新的 csrf token ,正如我之前提到的,这一切在没有安全 cookie 的情况下也能正常工作。我也尝试将我的 session key 传递给 cookieParser() 但无济于事,解决方案位于 Express-session Secure Cookies not working也不起作用(例如设置 resave:true)。没有 AJAX 请求,要么是直接的 POST,并且 token 在表单中正确呈现。

我在这里遗漏了一些明显的东西吗?

最佳答案

我刚刚做了类似的事情,至少在我的设置中,我必须在 Express 的信任代理中指定以下数组。

app.set('trust proxy', ['loopback', 'linklocal', 'uniquelocal']);

我还相信express希望看到所有标准的x-forwarded header ,而不仅仅是-proto。这是我使用的配置:

proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Proto $scheme;

关于node.js - expressjs、nginx 代理、csurf 和安全 cookie 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50937042/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com