客户端IP不同,heroku中的每个页面重新加载

Posted

技术标签:

【中文标题】客户端IP不同,heroku中的每个页面重新加载【英文标题】:client IP is different each page reload in heroku 【发布时间】:2021-06-04 11:58:10 【问题描述】:

我正在尝试获取客户端 IP 作为保存特定用户的一种方式,以便服务器在他们下次访问时知道他们是谁,而无需登录/注册任何东西。这是一个带有 NodeJS 后端的 React 前端。

我在本地尝试了我的应用程序,它似乎工作正常。但是我尝试将它部署到 Heroku,现在每次重新加载时我都会获得不同的 IP 地址。它在访问期间保持相同的 IP,但是一旦我重新加载(刷新)页面,我的 IP 就会改变..

[Method: 'POST'] [Path: '/api/posts'] [IP '::ffff:***.63.***.219']
[Method: 'POST'] [Path: '/api/posts'] [IP '::ffff:***.47.***.144']

(实际修改的ip)

这是我的控制台,您可以看到 IP 完全不同,它看起来一点也不像我的 IP。我正在从请求对象 (request.ip) 中获取 IP。

为什么每次在 Heroku 上的 IP 都不同,但在我的本地机器上却稳定?是否有另一种获取我应该使用的客户端 IP 的方法?或者这是一个 Heroku 问题?我一直在寻找有关此问题的答案,但我发现是空的,这让我认为这是 Heroku 特有的。

【问题讨论】:

【参考方案1】:

根据Heroku Documentation,所有请求都通过代理,该代理主要充当负载均衡器(如果我没有记错的话)。可以使用custom HTTP-Headers获取客户端ip地址,但是不推荐

补充: 出于安全原因,您应该避免使用 IP 来识别用户,因为这可能会导致会话劫持。请改用 cookie 等技术!

【讨论】:

我需要一种方法来识别用户而不让他们能够操纵它。 (当然***可以操纵他们的IP,但我不知道有什么办法)他们可以删除cookies和本地存储,我不希望他们能够这样做。我想要一种方法来识别用户,无论他们做什么来试图隐藏它(除了 ***) 您正在寻找类似 supercookie 的东西。问题是没有人站在你这边。这意味着所有常见的浏览器制造商(如 Mozilla、Google 等)都实施了阻止网站完全跟踪用户的功能。根据我的信息,没有任何技术可以 100% 跟踪用户。您可以搜索“画布指纹”或“favicon supercookie”之类的内容,但制造商会尽可能地屏蔽它们。 我不想真正“追踪”他们。但是当他们发布消息时,我会生成一个随机 ID 并将其分配给该 IP。那么从该 IP 发布的任何人都将使用该 ID 发布。我不喜欢画布指纹或 favicon 超级 cookie 的想法。这是我能想到的最简单的解决方案。看到你回答了这个问题,虽然我会选择这个作为答案,我想我的解决方案有效,只是在 heroku 上不行。

以上是关于客户端IP不同,heroku中的每个页面重新加载的主要内容,如果未能解决你的问题,请参考以下文章

Django:即使使用缓存中的数据,模板加载也很慢

Loading加载页面

Spring MVC:如何在每个 Thymeleaf 页面上重新加载数据库中的登录用户信息?

页面重新加载后保存草稿,无需通过js或php注册[关闭]

Jquery form submit() 到控制器中的操作然后返回一个对象给客户端而不是重新加载页面

Rails,mongoid,heroku 性能