是否可以伪造或劫持$_SERVER['REMOTE_ADDR']
变量的内容?
我想伪造一个请求:
$_SERVER['REMOTE_ADDR']='127.0.0.1';
我如何用PHP做到这一点?CURL可以这样做吗?
我认为您的意思是远程伪造。简短的答案是可以。关于它多么容易的长答案取决于您要伪造它的方式。
如果您不关心接收响应,那么它就像打开原始套接字到目标并伪造源IP地址一样简单。我不确定在PHP中是否真的容易实现,因为所有PHP的套接字实现都在TCP级别或更高级别。但我确信这是可能的。现在,由于您不受网络控制,因此响应不会返回给您。因此,这意味着您(无论如何)都无法(通过可靠的方式)通过伪造的TCP头创建TCP连接(因为syn-
ack确实通过要求双向通信来防止这种情况)。
但是,如果您可以破坏IP所在的网关,则可以执行任何操作。因此,如果您破坏了与计算机连接的wifi路由器,则可以装作是那台计算机,而服务器不会告诉您区别所在。如果您破坏了ISP的出站路由器,则可以(至少在理论上)假装是计算机,而服务器则无法分辨出差异。
但是,127.0.0.1
如果您实际上损害了本地计算机/服务器,则只能在TCP下伪造回送地址。那时真的重要吗?
如果您使用框架来访问此信息,请 绝对确保 它不检查X-HTTP-FORWARDED- FOR
标题!否则,伪造IP地址很简单。例如,如果您使用的是ZendFramework的Zend_Controller_Request_Http::getClientIp
方法,请绝对确保将其false
作为参数传递!否则,有人只需要发送HTTP标头即可:X-Http- Forwarded-For: 127.0.0.1
它们现在看来是本地的!在这种情况下,使用框架而不了解后端的工作原理确实很糟糕。
问题内容: 信任安全吗?是否可以通过更改请求标头或类似的内容来代替? 这样写安全吗? 问题答案: 是的,这很安全。它是TCP连接的源IP,不能通过更改HTTP标头代替。 您可能要担心的一种情况是,如果您在反向代理后面,则REMOTE_ADDR将始终是代理服务器的IP,而用户IP将在HTTP标头中提供例如X-Forwarded-For。但是对于正常使用情况,读取REMOTE_ADDR是可以的。
问题内容: 我正在为进行AJAX调用的JavaScript写一些QUnit测试。 为了隔离,我重写以将AJAX调用的参数数组写入变量。这可以测试方法如何使用AJAX函数,但是我很难测试 从位于http://api.jquery.com/load/的文档中: 当检测到成功的响应时(即,当textStatus为“成功”或“未修改”时),. load()将匹配元素的HTML内容设置为返回的数据。 因此,
我们中的两个人在不同的GIT分支中制作了一个迁移脚本。现在,我已经拉动了源开发分支,并更正了 GIT 合并问题,并将我的迁移脚本重命名为最后一个。因此,数据库的新初始化和从开发分支的版本迁移数据库将是可以的。 然而,我的本地测试数据库中有很多数据,所以我手动应用了我在GIT中引入的新迁移脚本。然而,我不能让flyway认为,一切都很好。 那么,我如何才能伪造迁移? 当我尝试迁移时,我收到以下错误:
问题内容: 我最近在Python中开发了一个围绕某些ORM文档对象命名的类,以透明地向其中添加一些功能,而不用任何方式更改其接口。 我对此只有一个问题。假设我包裹了一些物体。呼叫将返回,因为确实是的一个实例。 有没有办法伪造Python中的对象类型以具有相同的调用返回? 问题答案: 测试对象的 类型 通常是python中的反模式。在某些情况下,测试对象的 “鸭子类型” 是有意义的,例如: 但是,即
问题内容: 所有, 我正在尝试在一些古老的Java代码中进行一些单元测试(无接口,无抽象等)。 这是一个使用ServletContext的servlet(我假设它是由Tomcat设置的),并且它的数据库信息在web.xml / context.xml文件中设置。现在,我已经弄清楚了如何制作Fake ServletContext,但是代码已经 遍布整个地方(因此替换它是不可行的)。我需要找到一种方法
问题内容: 我试图为不可能进行大量代码更改的应用程序编写单元测试。代码库中几乎所有的.php文件都使用一些$ _SERVER [‘’]变量,例如 因此,现在当我不得不编写和运行PHPUnit测试用例时,必须以某种方式设置这些变量。目前,我正在用户环境中设置这些变量,然后执行 这样获取服务器变量工作正常。我通过命令行以方式运行测试。 Ques1: 通过命令行运行phpunit测试时,是否可以设置$