代理操纵标题,所以我决定用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>
您怎么看?这会阻止大多数代理吗?我的实施是否正确(这是我做的事情的最佳方式)?
答案 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请求中发送任何特殊标头。