【IP】伪造 && 甄别
断言
三重问:
IP伪造是否可能?
1为True,IP伪造的规模性是否存在限制?
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_IP
、HTTP_X_FORWARDED_FOR
的安全性不足,所以本应只采用,REMOTE_ADDR的值,但可能采集到空值。
传闻:如果REMOTE_ADDR传来的是负载均衡的节点IP,那么前两者是可信的,如果客户端直接与服务器对接,则前两者依旧是存在伪造。
参考资料:
你永远获得不到我的真实IP
如何避免用户访问请求伪造IP