【原创】交互型网页防止IP欺骗的技巧
很多交互型网页,比如在线投票、在线答题、在线调查以及在线抽奖等,一般来说都会以用户的IP作为限制条件,限制同一IP的用户参加活动的次数。
网络上流行着很多所谓取真实客户端IP的代码,无外乎都是通过检查代理来路来获得所谓的“真实IP”,但这个IP真的是“真实”的吗?我看未必,这类作法倒有些聪明反被聪明误了。
我们都知道,网页访问的协议是HTTP,而在这个协议的通讯过程中,几乎没有任何可信的数据。之所以这么说,是因为所有的HTTP协议数据都是可以伪造的,而唯一真实的,是请求页面的直接客户端IP。这个IP我们可以通过HTTP环境变量REMOTE_ADDR来获得,这可以说是唯一可信的地址数据了,而另外两个环境变量HTTP_CLIENT_IP和HTTP_X_FORWARDED_FOR,虽然指明了代理来源路径IP,但是很可惜,这些数据是不可靠的,除非你确信代理服务器是可靠的,但这几乎是不可能的。
说到这里,那么到底怎么获得客户端IP才比较靠谱,我的观点是用REMOTE_ADDR来获得直接请求的IP来源,因为这是唯一可靠的数据。如果我们信任了另外两个关于代理服务器的IP信息采用网络上流行的那些所谓取真实IP的方法呢?结果是非常糟糕的,我们会被黑客轻而易举的伪造代理来路IP,然后把我们的投票之类的数据结果刷爆。
所以说,在需要判断和限制IP的时候,不要考虑所谓的代理IP,那些都是浮云,没有可靠的信息,防止IP欺骗最靠谱的只能是依赖检测直接的访问地址了。