前面发布了一篇文章,讲述了多重代理时防止伪造X-Forwarded-For的方法。
那只是针对使用代理服务器的情况。虽然没使用代理服务器时,很少会出现这个问题,但是也不排除有些傻逼PHP程序,如果X-Forwarded-For的内容不为空,就会主动拿来当做访客真实IP。使用CDN的话,还能获取访客的正确IP,但是没使用CDN的话……
这岂不是让那些不法分子有机可乘了吗?
大名鼎鼎的WHMCS就是其中之一!
其实如果要解决这个问题,在该PHP程序中,把类似这样的代码删掉就行:
1 |
$_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_FORWARDED_FOR']; |
但是,上面所说到的WHMCS,并非开源PHP程序,使用过ioncube加密,除非decode了,否则要修改源程序删代码,是不太可能的。
不过幸运的是,WHMCS有唯一一个没有加密且全局都使用的文件:configuration.php
既然WHMCS要把变量$HTTP_X_FORWARDED_FOR的内容拿来做访客真实IP,那么我们只需在configuration.php里面把$remote_addr(前一篇文章已解释过$remote_addr)赋值给$HTTP_X_FORWARDED_FOR。在configuration.php的<?php ?>之间加入以下代码:
1 2 3 4 5 |
<?php …… $_SERVER['HTTP_X_FORWARDED_FOR'] = $_SERVER['REMOTE_ADDR']; …… ?> |
最后顺便提一下:本文仅仅是针对未使用反向代理(CDN)的网站防止伪造IP。如果你使用的是虚拟主机,且有CDN,无法修改服务器配置文件,那么只能用那“高风险”的方法去获取访客真实IP了。
Comments are closed.