Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何伪造$服务器[';远程地址';]变量?_Php_Security - Fatal编程技术网

Php 如何伪造$服务器[';远程地址';]变量?

Php 如何伪造$服务器[';远程地址';]变量?,php,security,Php,Security,是否可能伪造或劫持$\u SERVER['REMOTE\u ADDR']变量的内容 我想用以下内容伪造请求: $_SERVER['REMOTE_ADDR']='127.0.0.1'; 我怎样才能用PHP做到这一点?CURL能做到吗?REMOTE\u ADDR 用户查看当前页面的IP地址 您可以使用代理等请求脚本更改IP地址,但不能在其中设置任何您想要的文本。远程地址不是出于礼貌而添加的,它在IP协议中用于路由包,因此如果您这样做,您将不会收到响应,因为您正在谈论HTTP请求,通过TCP连接交付

是否可能伪造或劫持
$\u SERVER['REMOTE\u ADDR']
变量的内容

我想用以下内容伪造请求:

$_SERVER['REMOTE_ADDR']='127.0.0.1';

我怎样才能用PHP做到这一点?CURL能做到吗?

REMOTE\u ADDR

用户查看当前页面的IP地址


您可以使用代理等请求脚本更改IP地址,但不能在其中设置任何您想要的文本。

远程地址不是出于礼貌而添加的,它在IP协议中用于路由包,因此如果您这样做,您将不会收到响应,因为您正在谈论HTTP请求,通过TCP连接交付,需要设置多个IP数据包(以及匹配的响应):


不,这是不可能的(当然,通过环回接口从同一主机发送请求除外)

这是apache或您正在使用的任何服务器设置的变量。你不能欺骗它。
您可以运行
$\u服务器['REMOTE\u ADDR']='127.0.0.1'在脚本的开头,但我怀疑这是您试图做的

您可以覆盖服务器
数组中的任何项目,包括您提到的服务器中的项目;当然,不是在别人家


但是,它不会更改您计算机的IP地址。

如果您通过代理进行浏览,
$\u SERVER['REMOTE\u ADDR']
可能会设置为代理的IP地址,而不是最终用户的IP地址

在本例中,您还可以使用其他标题:此页面提供了一个函数,用于检查所有可能性,并提供最有可能是最终用户的地址:

但是,如果用户使用配置不当的代理、恶意代理或设计用于匿名最终用户的代理进行代理,则除了
REMOTE\u ADDR
(这只会将您引向代理)之外,您将无法保证任何头


如果您的最终用户通过HTTPS浏览,则
远程地址将始终是他的IP地址;您不能通过HTTPS使用代理转发。因此,绝对确定他的地址的一种方法是让他用HTTPS打开你的网站。

我想你的意思是远程伪造。简单的回答是可以。关于它有多容易的长答案取决于你想如何伪装它

如果您不关心接收响应,那么这就像打开目标的原始套接字并伪造源IP地址一样简单。我不确定这是否真的很容易在PHP中实现,因为PHP的所有套接字实现都处于或高于TCP级别。但我相信这是可能的。现在,由于您无法控制网络,因此响应不会返回给您。因此,这意味着您无法(无论如何都可靠地)通过一个微不足道的伪造TCP报头创建TCP连接(因为syn ack需要双向通信来防止这种情况)

然而,如果你可以破坏IP关闭的网关,你可以做任何你想做的事情。因此,如果你破坏了一台计算机连接到的wifi路由器,你可以假装是那台计算机,而服务器不会告诉你区别。如果你破坏了ISP的出站路由器,你可以(至少在理论上)假装是计算机,而服务器不会分辨出区别

有关更多信息,请参见以下链接:

但是,如果您实际上破坏了本地计算机/服务器,则只能在TCP下伪造
127.0.0.1
环回地址。在这一点上,这真的很重要吗

重要的 如果您使用框架访问此信息,请务必确保它不会检查
X-HTTP-FORWARDED-FOR
标题!否则,伪造IP地址就很简单了。例如,如果您使用的是method,请务必将
false
作为参数传递!否则,某人只需要发送一个HTTP头:
X-HTTP-Forwarded-For:127.0.0.1
,它们现在看起来是本地的!在这种情况下,在不了解框架在后端如何工作的情况下使用框架可能非常糟糕

编辑:相关 我最近写了一篇博客文章,讲述了我是如何在StackOverflow的应用程序中偶然发现一个漏洞的。它在这里非常相关,因为它利用了一种与这个问题所寻找的非常相似的机制(尽管它周围的环境有些狭窄):


Apache从用于与浏览器通信的TCP套接字填充
$\u服务器['REMOTE\u ADDR']
不可能通过开放的互联网影响这一变量,因为互联网的复杂性。如果客户端和服务器位于广播网络(如wifi)上,则您可以嗅探该线路并完成握手

此外,它看起来需要对TCP堆栈和网卡驱动程序进行一些调整。5年后这仍然是一个可靠的解决方案吗?