前言
什么是X-Forwarded-For伪造?
就是服务器获取访问IP时未做严格限制,导致访问IP是可以伪造的。
漏洞成因
在这,我复制一段网上的php代码来说的更清楚一点。以下都是依据此代码。
1 | <?php |
上面这段代码获取访问IP
的时候,首先判断$_SERVER["HTTP_X_FORWARDED_FOR"]
是否存在,如果存在,则把这个值赋给realip
,如果不存在,则再判断$_SERVER["HTTP_X_FORWARDED_FOR"]
是否存在,如果存在,把该值赋给
realip
,最后如果上述两个都不存在,则把$_SERVER["HTTP_X_FORWARDED_FOR"]
赋给realip
。最后,返回realip
。
在这HTTP_X_FORWARDED_FOR
是可以通过修改HTTP
头来重置的。
下面,我们看下下图,当没有设置$_SERVER["HTTP_X_FORWARDED_FOR"]
和$_SERVER["HTTP_X_FORWARDED_FOR"]
时,可以从输出得知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
。