【IP】伪造 && 甄别

断言

三重问:

  1. IP伪造是否可能?

  2. 1为True,IP伪造的规模性是否存在限制?

  3. 1为True,甄别IP伪造的成功率是多少?

IP伪造是否可能

这个问题简单提一下,真实的IP伪造是很难实现的,TCP协议中,IP地址被封装在IP数据包内,传送出现任何问题,都将与其封装的IP进行交互。

交互必定失败,因为伪造IP具备了一个“只能发送、不能接收”的特点,作为替代品,人们往往会采用代理IP。

IP伪造的规模性

无论是普匿、还是高匿,代理方的IP数量都是有限的,所以在规模性方面,的确存在限制。

但我一直都很怀疑,黑客们可以通过超量的远程入侵,来完成规模性突破,当然,这种层面的安全,服务端已经很难产生效果了,更多的是客户端的安全防护。

甄别IP伪造的成功率是多少

IP伪造的成功率是技术层面的,换而言之,目前常用的IP获取方式(就PHP而言)有三种,分别是:

  • HTTP_CLIENT_IP:IP包的报头,本应储存客户端IP,但并没有一致性的标准。

  • HTTP_X_FORWARDED_FOR:伪造过于方便,而且伪造方式在互联网上过于泛滥。

  • REMOTE_ADDR:末端IP,显示的是数据包发送端的IP——可能是代理IP,谁发包,谁签名。但可能存在无值的结果。

三种IP的伪造方式:(源于豆瓣)

curl_setopt($curl, CURLOPT_HTTPHEADER, array (
            'Client_Ip: '.mt_rand(0, 255).'.'.mt_rand(0, 255).'.'.mt_rand(0, 255).'.'.mt_rand(0, 255),
));//优点:伪造成本低,通杀90%系统

curl_setopt($curl, CURLOPT_HTTPHEADER, array (
            'X-Forwarded-For: '.mt_rand(0, 255).'.'.mt_rand(0, 255).'.'.mt_rand(0, 255).'.'.mt_rand(0, 255),
));//优点:伪造成本低,通杀90%系统

curl_setopt($curl, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
curl_setopt($curl, CURLOPT_PROXY, '1.1.1.1:8080');// 只能采用代理来进行模拟。
//优点:通杀100%系统

得出结论,由于HTTP_CLIENT_IPHTTP_X_FORWARDED_FOR的安全性不足,所以本应只采用,REMOTE_ADDR的值,但可能采集到空值。

传闻:如果REMOTE_ADDR传来的是负载均衡的节点IP,那么前两者是可信的,如果客户端直接与服务器对接,则前两者依旧是存在伪造。

参考资料:
你永远获得不到我的真实IP
如何避免用户访问请求伪造IP

相关推荐