【发布时间】:2013-08-18 07:52:38
【问题描述】:
在任何 Heroku 堆栈上,我想获取客户端的 IP。我的第一次尝试可能是:
request.headers['REMOTE_ADDR']
这当然行不通,因为所有请求都通过代理传递。所以替代方案是使用:
request.headers['X-Forwarded-For']
但这不太安全,是吗?
如果它只包含一个值,我接受这个。如果它包含多个值(逗号分隔),我可以取第一个。
但是如果有人操纵这个值怎么办?我不能像对request.headers['REMOTE_ADDR'] 那样信任request.headers['X-Forwarded-For']。而且也没有我可以使用的受信任代理列表。
但必须有某种方式来可靠地获取客户端的 IP 地址,始终如此。你认识一个吗?
在their docs 中,Heroku 将X-Forwarded-For 描述为“连接到 Heroku 路由器的客户端的原始 IP 地址”。
这听起来好像 Heroku 可以用原始远程 IP 覆盖 X-Forwarded-For。这样可以防止欺骗,对吗?有人可以验证吗?
【问题讨论】:
-
对不起,这是什么语言?如果不是python,我如何在python中做到这一点?
-
Heroku docs(与您提到的相同)出于安全原因明确表示不信任
X-Forwarded-For标头。自 2013 年以来一定有更新。 -
原始问题在
ENV['REMOTE_ADDR']与ENV['HTTP_X_FORWARDED_FOR']的上下文中提出这个问题;修改问题以指定这些是请求标头 (request.headers)
标签: http heroku ip-address