浏览代码

增加Proxy检测

Zhu Jinhui 7 年之前
父节点
当前提交
0b95f62436
共有 1 个文件被更改,包括 87 次插入0 次删除
  1. 87 0
      src/Library/ProxyDetected.php

+ 87 - 0
src/Library/ProxyDetected.php

@@ -0,0 +1,87 @@
+<?php
+/**
+ * 检测用户是否是通过代理服务器访问
+ *
+ * 用法:
+ * $proxyDetected = \Qii\Library\new ProxyDetected();
+ * $isProxy = $proxyDetected->isProxy();
+ */
+namespace Qii\Library;
+
+class ProxyDetected
+{
+    
+    // HTTP-Proxy-Headers
+    protected $proxyHeaders = array(
+        'HTTP_X_FORWARDED_FOR',
+        'HTTP_X_FORWARDED',
+        'HTTP_X_REAL_IP',
+        'HTTP_X_CLIENT_IP',
+        'HTTP_X_FORWARDED_HOST',
+        'HTTP_X_FORWARDED_SERVER',
+        'HTTP_FORWARDED_FOR',
+        'HTTP_CLIENT_IP',
+        'HTTP_VIA',
+        'HTTP_FORWARDED',
+        'HTTP_FORWARDED_FOR_IP',
+        'VIA',
+        'X_FORWARDED_FOR',
+        'FORWARDED_FOR',
+        'X_FORWARDED',
+        'FORWARDED',
+        'CLIENT_IP',
+        'FORWARDED_FOR_IP',
+        'HTTP_PROXY_CONNECTION'
+    );
+    
+    //Ports to scan
+    protected $scanPorts = array(
+        80,
+        443,
+        3128,
+        8080,
+    );
+    
+    
+    //List of ports to compare with the remoteport.
+    protected $ports = array(
+        78,
+        79,
+        80,
+        81,
+        82,
+        83,
+        443,
+        3128,
+        8080,
+        8081,
+        8090,
+        8181,
+        8282,
+        8888,
+        9050,
+        9999
+    );
+    
+    function isProxy()
+    {
+        foreach ($this->proxyHeaders as $header) {
+            if (isset($_SERVER[$header])) {
+                return true;
+            }
+        }
+        
+        foreach ($this->scanPorts as $port) {
+            if (@fsockopen($_SERVER['REMOTE_ADDR'], $port, $errstr, $errno, 1)) {
+                return true;
+            }
+        }
+        
+        foreach ($this->ports as $port) {
+            if ($_SERVER["REMOTE_PORT"] == $port) {
+                return true;
+            }
+        }
+        return false;
+    }
+}