proxyscan to check (and deny) proxy connections
authorMatteo Nastasi (mop) <nastasi@alternativeoutput.it>
Thu, 27 Mar 2008 12:29:53 +0000 (12:29 +0000)
committerMatteo Nastasi (mop) <nastasi@alternativeoutput.it>
Thu, 27 Mar 2008 12:29:53 +0000 (12:29 +0000)
web/Obj/brisk.phh
web/Obj/proxyscan.phh [new file with mode: 0644]
web/briskin5/index.php
web/briskin5/index_rd.php
web/briskin5/index_wr.php
web/index.php
web/index_rd.php
web/index_wr.php

index b68d316..5e92d00 100644 (file)
@@ -1257,8 +1257,13 @@ class Room {
        else {
          $user_cur = &$this->user[$table->player[$i]];
        }
-        if ($only_you && $user_cur != $user)
-          continue;
+
+        if ($only_you) {
+          if ($user_cur != $user)
+            continue;
+          else
+            $user_mesg = "== chat ban ==";
+        }
        
        $user_cur->comm[$user_cur->step % COMM_N] = "gst.st = ".($user_cur->step+1)."; ";
        $user_cur->comm[$user_cur->step % COMM_N] .= sprintf('chatt_sub("%s","%s");',
diff --git a/web/Obj/proxyscan.phh b/web/Obj/proxyscan.phh
new file mode 100644 (file)
index 0000000..1e9376b
--- /dev/null
@@ -0,0 +1,198 @@
+<?php
+/**
+ *     Proxy Detector v0.1
+ *             copyrights by: Daantje Eeltink (me@daantje.nl)
+ *                                             http://www.daantje.nl
+ *
+ *             first build: Mon Sep 18 21:43:48 CEST 2006
+ *             last build: Tue Sep 19 10:37:12 CEST 2006
+ *
+ *     Description:
+ *             This class can detect if a visitor uses a proxy server by scanning the
+ *             headers returned by the user client. When the user uses a proxy server,
+ *             most of the proxy servers alter the header. The header is returned to
+ *             PHP in the array $_SERVER.
+ *
+ *     License:
+ *             GPL v2 licence. (http://www.gnu.org/copyleft/gpl.txt)
+ *
+ *     Support:
+ *             If you like this class and find it usefull, please donate one or two
+ *             coins to my PayPal account me@daantje.nl
+ *
+ *     Todo:
+ *             Add open proxy black list scan.
+ */
+
+class proxy_detector {
+
+  /**
+   * CONSTRUCTOR
+   *   Set defaults...
+   */
+  function proxy_detector(){
+    $this->config = array();
+    $this->lastLog = "";
+
+    //set default headers
+    $this->scan_headers = array(
+                               'HTTP_VIA',
+                               'HTTP_X_FORWARDED_FOR',
+                               'HTTP_FORWARDED_FOR',
+                               'HTTP_X_FORWARDED',
+                               'HTTP_FORWARDED',
+                               'HTTP_CLIENT_IP',
+                               'HTTP_FORWARDED_FOR_IP',
+                               'VIA',
+                               'X_FORWARDED_FOR',
+                               'FORWARDED_FOR',
+                               'X_FORWARDED',
+                               'FORWARDED',
+                               'CLIENT_IP',
+                               'FORWARDED_FOR_IP',
+                               'HTTP_PROXY_CONNECTION'
+                               );
+  }
+
+  function exists_in_rbl($remote) {
+    $rbls = array('http.dnsbl.sorbs.net', 'misc.dnsbl.sorbs.net');
+    //    $remote = $_SERVER['REMOTE_ADDR'];
+    // $remote = '213.134.170.206';
+    // $remote = '64.34.166.71';
+    
+    if (preg_match("/([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)/",
+                   $remote, $matches)) {
+      foreach ($rbls as $rbl) {
+       $rblhost = $matches[4] . "." . $matches[3] . "." .
+         $matches[2] . "." . $matches[1] . "." . $rbl;
+       
+       $resolved = gethostbyname($rblhost);
+       // echo "RBL ".$rblhost."<br>";
+       if ($resolved != $rblhost) {
+         return true;
+       }
+      }
+    }
+    return false;
+  }
+  
+  /**
+   * VOID setHeader( STRING $trigger )
+   *   Set new header trigger...
+   */
+  function setHeader($trigger){
+    $this->scan_headers[] = $trigger;
+  }
+
+
+  /**
+   * ARRAY $triggers = getHeaders( VOID )
+   *   Get all triggers in one array
+   */
+  function getHeaders(){
+    return $this->scan_headers;
+  }
+
+
+  /**
+   * VOID setConfig( STRING $key,  STRING $value)
+   *   Set config line...
+   */
+  function setConfig($key,$value){
+    $this->config[$key] = $value;
+  }
+
+
+  /**
+   * MIXED $config = getConfig( [STRING $key] )
+   *   Get all config in one array, or only one config value as a string.
+   */
+  function getConfig($key=''){
+    if($key)
+      return $this->config[$key];
+    else
+      return $this->config;
+  }
+
+
+  /**
+   * STRING $log = getLog( VOID )
+   *   Get last logged information. Only works AFTER calling detect()!
+   */
+  function getLog(){
+    return $this->lastLog;
+  }
+
+
+  /**
+   * BOOL $proxy = detect( VOID )
+   *   Start detection and return true if a proxy server is detected...
+   */
+  function detect(){
+    $log = "";
+
+
+    if ($this->exists_in_rbl($_SERVER['REMOTE_ADDR']) == TRUE)
+      return (TRUE);
+
+    //scan all headers
+    foreach($this->scan_headers as $i){
+      //proxy detected? lets log...
+      if($_SERVER[$i])
+       $log.= "trigger $i: ".$_SERVER[$i]."\n";
+    }
+
+    //let's do something...
+    if($log){
+      $log = $this->lastLog = date("Y-m-d H:i:s")."\nDetected proxy server: ".gethostbyaddr($_SERVER['REMOTE_ADDR'])." ({$_SERVER['REMOTE_ADDR']})\n".$log;
+
+      //mail message
+      if($this->getConfig('MAIL_ALERT_TO'))
+       mail($this->getConfig('MAIL_ALERT_TO'),"Proxy detected at {$_SERVER['REQUEST_URI']}",$log);
+
+      //write to file
+      $f = $this->getConfig('LOG_FILE');
+      if($f){
+       if(is_writable($f)){
+         $fp = fopen($f,'a');
+         fwrite($fp,"$log\n");
+         fclose($fp);
+       }else{
+         die("<strong>Fatal Error:</strong> Couldn't write to file: '<strong>$f</strong>'<br>Please check if the path exists and is writable for the webserver or php...");
+       }
+      }
+
+      //done
+      return true;
+    }
+
+    //nope, no proxy was logged...
+    return false;
+  }
+}
+
+//init class
+function is_proxy()
+{
+  $proxy = new proxy_detector();
+  
+  //start detect
+  if(!$proxy->detect()) {
+    //returned true, lets die...
+    echo "<br><br><div style=\"text-align:center;\"><h1>Proxy detected</h1><br><br>";
+    echo "Please disable your proxy server in your browser preferences or internet settings, and try again.<br><br></div>";
+    
+    //parse logged info
+    echo nl2br($proxy->getLog());
+    
+    //some credits...
+    // echo "<hr><strong>proxy detector v0.1</strong> - &copy;2006 <a href=\"http://www.daantje.nl\" target=\"_blank\">daantje.nl</a>";
+    
+    //and do nothing anymore! (but not in my example)
+    return (TRUE);
+  }
+  else
+    return (FALSE);
+}
+
+?>
\ No newline at end of file
index ef3d0ec..1e2b39f 100644 (file)
  * $Id$
  *
  */
+
+require_once("../Obj/brisk.phh");
+require_once("../Obj/proxyscan.phh");
+
+// Use of proxies isn't allowed.
+if (is_proxy()) {
+  exit;
+}
+
 ?>
 <html>
 <head>
@@ -49,7 +58,6 @@ var area_ptr;
 
 var gst  = new globst();
 gst.st = <?php 
-require_once("../Obj/brisk.phh");
 
 log_load("bin5/index.php");
 
index d32d36c..b5096a6 100644 (file)
  */
 
 require_once("../Obj/brisk.phh");
+require_once("../Obj/proxyscan.phh");
 require_once("Obj/briskin5.phh");
 
+// Use of proxies isn't allowed.
+if (is_proxy()) {
+  sleep(5);
+  exit;
+}
+
 log_load("LOAD: bin5/index_rd.php ".$QUERY_STRING);
 
 $first_loop = TRUE;
index c55f8f5..3935e0a 100644 (file)
  */
 
 require_once("../Obj/brisk.phh");
+require_once("../Obj/proxyscan.phh");
 require_once("Obj/briskin5.phh");
 
+// Use of proxies isn't allowed.
+if (is_proxy()) {
+  sleep(5);
+  exit;
+}
+
 if (DEBUGGING == "local" && $_SERVER['REMOTE_ADDR'] != '127.0.0.1') {
   echo "Debugging time!";
   exit;
index 439e65c..9d37c88 100644 (file)
  */
 
 require_once("Obj/brisk.phh");
+require_once("Obj/proxyscan.phh");
+
+// Use of proxies isn't allowed.
+if (is_proxy()) 
+     exit;
+
 require_once("briskin5/Obj/briskin5.phh");
 if (DEBUGGING == "local" && $_SERVER['REMOTE_ADDR'] != '127.0.0.1') {
   echo "Debugging time!";
index cc30e3e..65c7655 100644 (file)
  */
 
 require_once("Obj/brisk.phh");
+require_once("Obj/proxyscan.phh");
 require_once("briskin5/Obj/briskin5.phh");
 
+// Use of proxies isn't allowed.
+if (is_proxy()) {
+  sleep(5);
+  exit;
+}
 log_load("index_rd.php");
 
 $first_loop = TRUE;
index d7ccac2..2b459d0 100644 (file)
  */
 
 require_once("Obj/brisk.phh");
+require_once("Obj/proxyscan.phh");
 require_once("briskin5/Obj/briskin5.phh");
 
+// Use of proxies isn't allowed.
+if (is_proxy()) {
+  sleep(5);
+  exit;
+}
+log_load("index_rd.php");
+
 if (DEBUGGING == "local" && $_SERVER['REMOTE_ADDR'] != '127.0.0.1') {
   echo "Debugging time!";
   exit;