在Heroku Cedar上,我想获得客户端的IP.第一次尝试:
ENV['REMOTE_ADDR']
Run Code Online (Sandbox Code Playgroud)
当然,这不起作用,因为所有请求都通过代理传递.所以替代方案是使用:
ENV['HTTP_X_FORWARDED_FOR']
Run Code Online (Sandbox Code Playgroud)
但这不太安全,是吗?
如果它只包含一个值,我就拿这个.如果它包含多个值(以逗号分隔),我可以选择第一个值.
但是,如果有人操纵这个价值呢?我不能相信ENV['HTTP_X_FORWARDED_FOR'],我可以用ENV['REMOTE_ADDR'].并且我也没有可以使用的可信代理列表.
但总是必须有一些方法来可靠地获取客户端的IP地址.你知道吗?
在他们的文档中,Heroku描述了X-Forwarded-For"连接到Heroku路由器的客户端的原始IP地址".
听起来好像Heroku可能会X-Forwarded-For用原始的远程IP 覆盖它.这样可以防止欺骗,对吧?有人可以验证吗?