【问题标题】:Proxy detection代理检测
【发布时间】:2011-03-30 14:18:48
【问题描述】:

代理操作标题,所以我决定用 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>

你怎么看?这会阻止大多数代理吗?我的实现是否正确(这是做我想做的最好的方式)?

【问题讨论】:

  • 比较位置没有帮助,因为透明代理不会更改 URL。它可能会变得比这更复杂。但是你真的需要这个吗?究竟是为了什么?
  • 不,不知道有些网站是怎么做到的。
  • 您希望大公司的计算机无法访问您的网站? 为什么您认为您需要“停止代理”?它们无处不在,它们本身并没有什么坏处。

标签: php jquery proxy


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

    我同意 Marc B 的观点,最可靠的方法是检查您的 HTTP 请求以查找已知的代理标头。有很多在线工具可以轻松显示您的标头,例如,这个 proxy headers checker 向您显示代理服务器最常用的 HTTP 标头,如果您在其中的一些中看到您的 IP,您可以肯定知道你在代理后面。

    进一步回答您的问题,该链接中包含 HTTP 标头名称,因此您可以复制它们并在脚本中使用它。

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

    【讨论】:

      猜你喜欢
      • 2011-05-24
      • 2014-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-12
      • 2018-01-23
      • 1970-01-01
      相关资源
      最近更新 更多