本文代码使用PHP语言, 如有不适, 请自行转换为看得懂的语言。
小时候, 我在搜索”PHP 获取远程ip地址”的时候, 某美国知名搜索引擎会告诉我有个网页, 它里面是这样写的
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; else if (isset($_SERVER['REMOTE_ADDR'])) $ip = $_SERVER['REMOTE_ADDR']; else $ip = 'Unknown';
这样子会有一个问题, 就是客户端可以伪造成代理, 发送X-Forwarded-For头欺骗php, 如果只是获取REMOTE_ADDR, 用户用代理的话就没有办法了。
对于如上的解决方案我想到了两个。
方案一: 禁止使用代理, 也就是如果有X-Forwarded-For头的话就拒绝访问, 可是有的貌似不会发送X-Forwarded-For头。
方案二: 给每个代理服务器颁发一个证书, 只有合法的代理才能被服务器信任。
如上, 对于vpn均无效。
某神牛说过”只是我不觉得我们的能力足以用这些雕虫小技阻挡国家机器”。
发表评论