PHP的$可靠性
我正在构建一个旨在从本地主机进行管理的站点,但其中包含向互联网或本地网络用户公开数据的页面。 我可以依靠PHP的$ _SERVER ['REMOTE_ADDR']作为将用户标识为本地主机的安全/可靠方式吗? 谢谢!
编辑:澄清,我只关心确定请求是否来自本地主机(也许有更好的方法)。
该变量充满了Apache(或另一个Web服务器守护进程)提供的数据,并且应该可靠地识别连接另一端的IP地址,是的。 检查127.xxx(几乎总是127.0.0.1)和:: 1(对于IPv6)。 正如Senica所说,它可能并不总是存在的(例如,从命令行运行而不是通过web服务器运行)。 但如果它被填满,它应该是可靠的。
为了能够伪造它,有人已经需要非常广泛地访问您的网络和系统,而且无论如何您都无法用PHP保护它。
不是。它取决于Web服务器是否提供remote_addr。
收回这个。 ..正在考虑HTTP_REFERER。
它应该给你的IP地址...是的。 请记住,可能有代理服务器。
这可能通常不适用于本地主机的连接,但应考虑代理。 如果远程端使用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信息来实现安全性,因此它只是一个附带说明