前言:
什么是X-Forwarded-For伪造?
就是服务器获取访问IP时未做严格限制,导致访问IP是可以伪造的。
目录:
0x01:漏洞成因
0x02:漏洞危害
0x03:如何修复
漏洞成因
在这,我复制一段网上的php代码来说的更清楚一点。以下都是依据此代码。
<?php function getIP() { if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { $realip = $_SERVER['HTTP_X_FORWARDED_FOR']; } elseif (isset($_SERVER['HTTP_CLIENT_IP'])) { $realip = $_SERVER['HTTP_CLIENT_IP']; } else { $realip = $_SERVER['REMOTE_ADDR']; } return $realip; } echo getIP(); ?>
上面这段代码获取访问IP的时候,首先判断$_SERVER['HTTP_X_FORWARDED_FOR']是否存在,如果存在,则把这个值赋给realip,如果不存在,则再判断$_SERVER['HTTP_CLIENT_IP']是否存在,如果存在,把该值赋给
realip,最后如果上述两个都不存在,则把$_SERVER['REMOTE_ADDR']赋给realip。最后,返回realip。
在这HTTP_X_FORWARDED_FOR是可以通过修改HTTP头来重置的。
下面,我们看下下图,当没有设置$_SERVER['HTTP_X_FORWARDED_FOR']和$_SERVER['HTTP_CLIENT_IP']时,可以从输出得知realip为127.0.0.1
而当我们修改了X-Forwarded-For:localhost时,可以从输入得知,realip变成了,localhost,此时,访问ip也就得到了伪造。
漏洞危害
虽然只是伪造个IP,但危害也并一定就是小,危害大小视具体情况而定,下面就简单列举几个可能产生的危害
1:当某后台不希望别人访问时,可以通过伪造IP访问该后台。
2:当某刷赞刷量的业务时,如果基于访问IP,而这个值又可以修改,那么是不是可以刷赞刷量
3:当我们前台撞库的时候,如果服务器是通过X-Forwarded-For来判断访问IP的时候,我们是不是就可以多次撞库和爆破了呢。还有等等,不多叙述。
如何修复
一切用户的输入都是有害的,所以我们要获取用户访问的真实IP。也就是用REMOTE_ADDR来获取IP。这个IP获取的是真实或者代理IP。