是否有可能欺骗您的IP ...正在测试IP地址是否安全?

时间:2010-09-10 18:10:04

标签: php security ip

我在网站上有一些额外的功能,员工可以使用,但不允许客户查看。

员工都将进入一系列领域。

我所做的就是像这样得到用户ip:

$user_ip = gethostbyname($_SERVER['REMOTE_ADDR']);

然后我使用gethostbyname

获取用户将使用的域的所有ips数组

然后我检查用户是否在其中一个域上:

in_array($user_ip,$allowedIPS)

因此,如果用户位于其中一个域中,则会看到其他功能供内部使用。否则,他们只会看到对公众意味着什么。

我的问题是,这是安全的吗?或者有人可能欺骗他们的IP看起来像他们在我们的域名并获得这些功能的访问权限?

10 个答案:

答案 0 :(得分:8)

  

我的问题是,这是安全的吗?或者有人可能欺骗他们的IP看起来像他们在我们的域名并获得访问这些功能?

不,除非他们也可以访问其中一个允许的IP的网络,否则其中一个IP下的任何允许的计算机都会受到攻击并代理流量。

在你的场景中,它似乎已经足够了。好吧,除非特权用户在没有某种VPN的情况下不允许从其他IP访问内容。

请注意,IP spoofing通常与您使用的含义不同。这意味着只伪造数据包的源地址。这本身就没有价值,因为要访问服务,还需要从服务器接收响应。由于更好的路由,即使在这种意义上的“IP欺骗”也很少见。

答案 1 :(得分:8)

由于Three Way Handshake,无法在开放的互联网上欺骗TCP连接。但是,可以使用CSRF访问此功能。

PHP直接从Apache的TCP套接字中提取$_SERVER['REMOTE_ADDR'],因为它不会受到攻击者的影响。是的,我看过这段代码。

答案 2 :(得分:2)

如果非平凡的话,可以进行IP欺骗。

为什么不让您的员工登录才能访问仅限员工的功能?

答案 3 :(得分:2)

我认为这不可能,因为当您向服务器发出请求时,您实际上是在请求您的ISP请求服务器。

只要您验证ISP转发给您的所有HTTP Meta数据,例如X-FORWARDED-FOR和代理元数据,您就应该能够保持紧密的系统..

下面是一张可以帮助您理解我的意思的图表: alt text

请在此处阅读更多信息。

http://www.astahost.com/info.php/hacker39s-view-easy-spoofing-ip-address_t13807.html

答案 4 :(得分:2)

如果您打算这样做,请使用apache配置,而不是使用代码。您基本上是在重新发明内置的功能。

关于直接问题,正如其他人所说,如果非平凡的话,欺骗知识产权是可能的。也希望你没有任何不安全的无线接入点。

编辑:Apache access control说明。这是我假设您使用Apache由于PHP的使用,如果您实际使用的是IIS,它仍然是配置驱动的设置,但执行方式明显不同。

答案 5 :(得分:0)

我在这个上升了ROOK。您无法欺骗TCP连接,仍然可以从进行欺骗的同一台计算机访问您的站点。为什么?因为您的Web服务器(最初)将对欺骗性IP进行响应以尝试建立套接字连接(TCP 3次握手)。

可以想象,如果您有两台不同的公共IP地址的计算机(A和B),并且您使用其中一台计算机(A)使用B的IP地址欺骗或向您的Web服务器发送数据包,那么当您的Web服务器回复它向B发送数据包。

如果欺骗性呼叫中使用的IP地址在您的子网内部,则内部工作站将接收未启动的TCP SYN数据包的TCP ACK数据包并拒绝它们或忽略它们。我不知道任何TCP / IP堆栈实现会尝试完成针对仅ACK数据包的3次握手;它打破了标准协议。

欺骗是一种UDP泛洪技术,攻击者利用虚假IP地址进行DoS(拒绝服务)攻击,试图隐藏其踪迹。

希望这有帮助。

答案 6 :(得分:0)

$_SERVER['REMOTE_ADDR']由您的网络服务器提供,不可能直接欺骗它。我能看到的唯一方法是通过其中一个允许的IP来代理连接。

答案 7 :(得分:0)

当我们遇到类似的问题时,我们得出结论,如果用户通过http访问我们,我们不能完全依赖他们的IP地址,因为他们可能正在使用代理。但https总是直接连接;它不允许代理,所以我们可以确定我们看到的IP地址是正确的。因此,我们根据IP地址PLUS锁定我们的用户,他们必须通过https访问该网站(当然,并登录到他们的帐户)。

你的情况与我们的情况略有不同,但我会说上面对你也有用。

即使您没有遵循该确切的路径,您也需要了解代理。理论上,代理可以允许任意数量的不同用户从一个IP地址访问您的站点,因此如果您以某种方式设法将代理的IP放入允许的地址列表中,那么您将打开一个安全漏洞,因此您需要确保您添加到列表中的任何IP地址都是合法的(这是https可以提供帮助的地方)。

此外,如果您的用户来自家用电脑,请注意他们的IP地址可能会随时间而变化。大多数ISP会向他们的客户发放可以重新分配的动态IP,这意味着每次连接到互联网时,都有可能获得不同的IP地址。如果是这种情况,则不会进行欺骗,但是您无法通过其IP地址可靠地识别用户。

答案 8 :(得分:0)

尽管如前所述,但不可能通过Internet进行TCP中的IP欺骗,但存在其他攻击Web应用程序的方法。

请注意,许多Web实现(无论是否使用PHP)都容易受到X-Forwarded-For注入的攻击。 X-Forwarded-For是一个HTTP标头,用于在请求通过代理时指定原始IP地址。 Apache2中没有验证(可能),在某些配置中,这是传递给PHP的REMOTE_ADDR的IP地址。因此,可以通过这种方式进行IP欺骗。

假设攻击者将请求标头X-Forwarded-For设置为127.0.0.1。如果HTTP服务器上的配置允许这样做,则会将127.0.0.1传递给PHP-FPM的REMOTE_ADDR,而不是实际攻击者的IP。当我浏览Internet时,我总是将此标头添加到我的请求中以测试网页的安全性。当我将IP设置为localhost时,其中许多会显示其他管理工具栏。甚至在beta阶段时stackoverflow都会出现此错误,并且默认情况下,今天某些主要软件仍然对此很“脆弱”。

答案 9 :(得分:-1)

一切皆有可能,但总是成本问题 在大多数情况下,这种欺骗不值得