我正在构建一个旨在从localhost管理的网站,但包含向互联网或本地网络用户公开数据的网页。我可以依赖PHP的 $ _ SERVER ['REMOTE_ADDR'] 作为将用户识别为localhost的安全/可靠方式吗? 谢谢!
修改 为了澄清,我只关心确定请求是否来自localhost(也许有更好的方法)。
答案 0 :(得分:11)
该变量由Apache(或其他Web服务器守护程序)提供的数据填充,并且应该可靠地识别连接另一端的IP地址,是的。检查127.x.x.x(几乎总是127.0.0.1)和:: 1(对于IPv6)。正如Senica所说,它可能并不总是存在(例如,从命令行而不是通过Web服务器运行时)。但如果它被填满,它应该是可靠的。
为了能够伪造它,有人已经需要对你的网络和系统进行相当广泛的访问,无论如何都无法用PHP保护它。
答案 1 :(得分:0)
没有。它取决于Web服务器是否提供remote_addr。
回复。 ..正在考虑HTTP_REFERER。
应该给你ip地址......是的。记住可能有代理人。
答案 2 :(得分:-1)
这可能通常不适用于来自localhost的连接,但您应该考虑代理。如果远程端使用HTTP代理,$_SERVER['REMOTE_ADDR']
将包含该代理的IP地址,而不是客户端本身的IP地址。
但是,如果它是禁用隐私设置的代理,那么您可能有机会使用以下代码段获取客户端IP:
// will be set by the proxy if no privacy is enabled:
if(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
return $_SERVER['HTTP_X_FORWARDED_FOR'];
} else if(isset($_SERVER['REMOTE_ADDR'])) {
return $_SERVER['REMOTE_ADDR'];
}
但是如果您的客户端使用启用了隐私的HTTP代理,那么您将无法获得客户端IP。
安全提示(感谢@deceze)请注意,如果您依赖HTTP_X_FORWARDED_FOR
标头,攻击者很容易欺骗他们的IP。虽然使用其他技术也可以实现,但使用HTTP_X_FORWARDED_FOR
标头非常容易。你被警告了。但无论如何,Web应用程序永远不应该使用IP信息来保证安全性,因此它只是一个侧面说明