代理检测

时间:2011-03-30 14:18:49

标签: php jquery proxy

代理操纵标题,所以我决定用js和php检查页面地址,如果它们是相等的=>没有代理人。 但我认为我的实施不正确。

    <script src="http://code.jquery.com/jquery-1.5.1.min.js"></script>
<div id="JS" style="display:none">
<script>



</script>
</div>
<div id="noJS">Enable JS</div>
<script>
$(document).ready(function() {
$("#noJS").hide();
$("#JS").show().addClass("hasJS");  
if($("#JS").hasClass("hasJS")) {

    if($("#addrphp").text() == location.href) {
        alert("no proxy");
    }
    else {
        alert("proxy")

    }

}   
});
</script>
<?php
$url="http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
?>
<div id="addrphp" style="display:none;"><?php echo $url; ?></div>

您怎么看?这会阻止大多数代理吗?我的实施是否正确(这是我做的事情的最佳方式)?

2 个答案:

答案 0 :(得分:7)

代理不会更改浏览器请求的网页地址,除非您使用Google缓存之类的内容。代理只是接受您的请求,获取请求中的任何地址的内容,并将回复转发给您的计算机。在任何时候都不应该改变地址,因为这意味着你要求的不是你得到的。

如果本地IP在Javascript中可用,您可以轻松检查请求来自的地址是否与Javascript中检测到的地址匹配,但Javascript无法处理该低级别的网络概念。一个签名的Java applet也可以,也可能是一个Flash / Silverlight applet,虽然我只是猜测那些。

但是,检查IP地址也会失败,因为它与家庭宽带路由器一样微不足道。 “本地”IP很可能类似10.0.0.13,但您的站点将检测到来自路由器外部地址的请求。没有“代理”涉及,只是一个NAT网关,但请求IP!=客户端IP和哇,你代理,伙计!

最可靠(但仍然不是特别可靠)的方法是检查各种代理标头,例如X-Forwarded-For

答案 1 :(得分:0)

我同意Marc B,最可靠的方法是检查您的HTTP请求,寻找已知的代理标头。有很多在线工具可以轻松显示您的标题,例如, proxy headers checker 会向您显示代理服务器使用最多的HTTP标头,如果您在某些标题中看到了您的IP,你肯定知道你是代理人的背后。

进一步探讨您的问题,在该链接中是HTTP标题名称,因此您可以复制它们并在脚本中使用它。

但是进一步解释Marc所说的,如果你没有看到任何标题,它就不能保证某人没有使用代理。有很多代理,透明和高匿名代理,不会在HTTP请求中发送任何特殊标头。