Php 在laravel中获取用户IP地址,方法与HTTP_X_FORWARDED_相似

Php 在laravel中获取用户IP地址,方法与HTTP_X_FORWARDED_相似,php,laravel,Php,Laravel,我需要获取我的用户IP地址 我找到了这篇文章 上面提到的文章使用了Request::ip() 但是,此方法返回我的服务器IP地址。据我从其他来源了解,当站点是localhost时,会发生这种情况,但该站点是托管的,并且在服务器上运行 这个网站是在线的,但它可能指的是localhost,因为这个网站可能位于自己的服务器上(我没有服务器配置方面的经验,不知道这是不是真的,只是一个猜测) 当我连接到DB主机时,我也使用localhost引用,而不是像mysql.phpmyadmin.hosting.c

我需要获取我的用户IP地址

我找到了这篇文章

上面提到的文章使用了
Request::ip()

但是,此方法返回我的服务器IP地址。据我从其他来源了解,当站点是localhost时,会发生这种情况,但该站点是托管的,并且在服务器上运行

这个网站是在线的,但它可能指的是
localhost
,因为这个网站可能位于自己的服务器上(我没有服务器配置方面的经验,不知道这是不是真的,只是一个猜测)

当我连接到DB主机时,我也使用
localhost
引用,而不是像
mysql.phpmyadmin.hosting.com
那样作为DB主机。因此,我的猜测是,
Request::ip()
返回服务器ip,因为站点不知何故位于本地主机上

但是,如果我使用$_SERVER['HTTP_X_FORWARDED_FOR'];我得到了正确的IP地址

现在我要问最后一个问题:这是否安全使用?是否有其他方法使用Laravel函数发出此请求

据我所知,$_服务器['HTTP_X_FORWARDED_'];可以有安全漏洞,根据


我可以使用
$\u服务器['HTTP\u X\u FORWARDED\u']安全无忧?如果没有,我还能采取什么其他方法来安全地获取用户IP地址?

X-Forwarded-For
的风险在于用户可以自己创建报头,从而传递他们想要的任何IP


解决方案是仅当
REMOTE\u ADDR
是受信任代理的头时才信任头。有一种方法可以让您强制执行此限制。

$\u服务器['REMOTE\u ADDR']
$\u服务器['HTTP\u X\u FORWARDED\u FOR']
更可靠。您是否使用负载平衡器将请求重定向到web服务器?@EliSadoff
请求::ip()
使用
$\u服务器['REMOTE\u ADDR']
。在代理/负载平衡的场景中,如OP,连接的远程地址将是代理/负载平衡器。@ceejayoz哦,这很有意义。不幸的是,使用
$\u服务器['HTTP\u X\u FORWARDED\u']
可以轻松进行欺骗。某些主机配置使用代理。因此,在本例中,远程地址是服务器ip。您可以对使用HTTP\u X\u FORWARDED\u。(对我来说)没什么大不了的。谢谢你的回答,我明白了。然而,X-for是否存在严重的安全漏洞?我所做的只是将IP地址保存在数据库中。我认为,如果他们改变IP地址,那没什么大不了的,只是一些计数上的不一致,但没什么大不了的——然而,如果这导致他们能够通过在数据库中实现代码,以某种方式访问数据库或其他严重的安全漏洞,那么X-Forwarded-For根本不起作用。期待您的回答:)@Patrick就我所知,只是数据完整性。如果你不在乎用户可能会欺骗你数据库中的IP,这应该是安全的。我试着做你所说的,通过篡改数据,使用类似“篡改数据”的东西,但这似乎更先进,而且只是一个简单的篡改?如果我错了,请纠正我:)@Patrick这需要一些努力。听起来您的主机在您的服务器前面有一个代理或负载平衡器,因此尝试设置
X-Forwarded-For
将被该设备忽略。你必须通过直接点击服务器本身来绕过它。您的代码中可能存在更微妙的漏洞,因此您仍应保持谨慎——例如,此处是否存在漏洞。