WordPress.org

Plugin Directory

Changeset 600093


Ignore:
Timestamp:
09/17/12 14:47:49 (5 years ago)
Author:
iosec
Message:
 
Location:
iosec-anti-flood-security-gateway-module/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • iosec-anti-flood-security-gateway-module/trunk/iosec.php

    r567845 r600093  
    11<?php 
    2 /** 
    3  * @package IOSEC Anti Flood Security Gateway Module 
    4  * @version 1.7 
     2 /** 
     3  * @package IOSEC Anti Flood Security Gateway Module 
     4  * @version 1.8 
     5  */ 
     6 /* 
     7 Plugin Name: IOSEC Anti Flood Security Gateway Module 
     8 Plugin URI: https://sourceforge.net/projects/iosec/ 
     9 Description: Anti Flood Security Gateway Module 
     10 Version: 1.8 
     11 Author: Gokhan Muharremoglu 
     12 Author URI: http://www.iosec.org 
     13 License: GPL2 
    514 */ 
    6 /* 
    7 Plugin Name: IOSEC Anti Flood Security Gateway Module 
    8 Plugin URI: https://sourceforge.net/projects/iosec/ 
    9 Description: Anti Flood Security Gateway Module 
    10 Version: 1.7 
    11 Author: Gokhan Muharremoglu 
    12 Author URI: http://www.iosec.org 
    13 License: GPL2 
    14 */ 
    15 /*  Copyright 2012  Gokhan Muharremoglu  (email : gokhan.muharremoglu@iosec.org) 
    16  
    17     This program is free software; you can redistribute it and/or modify 
    18     it under the terms of the GNU General Public License, version 2, as  
    19     published by the Free Software Foundation. 
    20  
    21     This program is distributed in the hope that it will be useful, 
    22     but WITHOUT ANY WARRANTY; without even the implied warranty of 
    23     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
    24     GNU General Public License for more details. 
    25  
    26     You should have received a copy of the GNU General Public License 
    27     along with this program; if not, write to the Free Software 
    28     Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA 
    29 */ 
    30 add_action('init', 'iosec', 1); 
    31  
    32 function iosec() 
    33   { 
    34      
    35 /////////////////////////////////// CONFIGURATION MENU /////////////////////////////////////////////// 
    36 $use_captcha ="y";  //If you want to use reCAPTCHA set value to "y" otherwise leave empty (default is "y"). 
    37 $publickey = "6Ld6fNESAAAAAIM4YzckCmfqyzFOmrrTj2Qq55Tq";    // Get a key from https://www.google.com/recaptcha/admin/create 
    38 $privatekey = "6Ld6fNESAAAAAKWYKMAypEffxoUlpW8RZ5UYGmaK";   // Get a key from https://www.google.com/recaptcha/admin/create 
    39 $interval       = 0.5;  //Connection Interval in seconds (e.g. 1, 0.5, 0.001, etc.). 
    40 $conection_limit = 1; //Connection count in interval value (e.g. 1, 3, 5, 100). 
    41 $block_proxies  = "";   //If you want to block proxies set value to "y" otherwise leave empty. 
    42 $refresh_timeout    = 10;   //Suspended Process Timeout value in seconds. 
    43 $redirection    = "";   //If you want to redirect user after suspended process, you can enter URL here. 
    44 $mail_info  = "";   //Mail address to notify (admin mail). 
    45 $debug_info = "y";  //If you want to show debug info then set value to "y" otherwise leave empty. 
    46 $behind_reverse_proxy   = "";   //If your web server behind a reverse proxy, set this value to "y". 
    47 $incremental_blocking   = "y"; //If you want to use incremental blocking, set this value to "y" (default is "y"). 
    48 $implicit_deny_timeout = 0;   //If you want to block every request as default for a timeout period (seconds), set this value to greater than "0" (default is "0"). 
    49 $cached_requests = 150;   //Monitoring data window size for last requests (for "ips" file size) (default is "150"). 
    50 ///////////////////////////////////////////////////////////////////////////////////////////// 
    51 /////////////////////////////////////////////////////////////////////////////////////////// 
    52  
    53 /* 
    54 Do not change below  
    55 */ 
    56  
    57 if (!is_dir(WP_CONTENT_DIR  .'/iosec_admin/')) { 
    58    mkdir(WP_CONTENT_DIR  .'/iosec_admin/', 0, true); 
    59 } 
    60 if (substr(sprintf('%o', fileperms(WP_CONTENT_DIR  .'/iosec_admin/')), -4) < 755) { chmod(WP_CONTENT_DIR  .'/iosec_admin/', 0755); } 
    61  
    62   //Create .htaccess file... 
     15 /*  Copyright 2012  Gokhan Muharremoglu  (email : gokhan.muharremoglu@iosec.org) 
    6316  
    64 if (!file_exists(WP_CONTENT_DIR  .'/iosec_admin/.htaccess')) { 
    65     $icerik = "deny from all";  
    66  
    67     $handle = fopen(WP_CONTENT_DIR  .'/iosec_admin/.htaccess', 'w+'); 
    68     fwrite($handle, $icerik); 
    69     fclose($handle); 
    70    } 
    71     $banlisttemp = WP_CONTENT_DIR  .'/iosec_admin/banlisttemp'; 
    72     $whitelist = WP_CONTENT_DIR  .'/iosec_admin/whitelist'; 
    73     $ips = WP_CONTENT_DIR  .'/iosec_admin/ips'; 
    74     $banlist = WP_CONTENT_DIR  .'/iosec_admin/banlist'; 
    75                             
    76                         define("RECAPTCHA_API_SERVER", "http://www.google.com/recaptcha/api"); 
    77                         define("RECAPTCHA_API_SECURE_SERVER", "https://www.google.com/recaptcha/api"); 
    78                         define("RECAPTCHA_VERIFY_SERVER", "www.google.com"); 
    79                          
    80                         function _recaptcha_qsencode($data) 
    81                           { 
    82                             $req = ""; 
    83                             foreach ($data as $key => $value) 
    84                                 $req .= $key . '=' . urlencode(stripslashes($value)) . '&'; 
    85                              
    86                             $req = substr($req, 0, strlen($req) - 1); 
    87                             return $req; 
    88                           } 
    89                          
    90                          
    91                          
    92                         function _recaptcha_http_post($host, $path, $data, $port = 80) 
    93                           { 
    94                             $req = _recaptcha_qsencode($data); 
    95                              
    96                             $http_request = "POST $path HTTP/1.0\r\n"; 
    97                             $http_request .= "Host: $host\r\n"; 
    98                             $http_request .= "Content-Type: application/x-www-form-urlencoded;\r\n"; 
    99                             $http_request .= "Content-Length: " . strlen($req) . "\r\n"; 
    100                             $http_request .= "User-Agent: reCAPTCHA/PHP\r\n"; 
    101                             $http_request .= "\r\n"; 
    102                             $http_request .= $req; 
    103                              
    104                             $response = ''; 
    105                             if (false == ($fs = @fsockopen($host, $port, $errno, $errstr, 10))) 
    106                               { 
    107                                 die('Could not open socket'); 
    108                               } 
    109                              
    110                             fwrite($fs, $http_request); 
    111                              
    112                             while (!feof($fs)) 
    113                                 $response .= fgets($fs, 1160); 
    114                             fclose($fs); 
    115                             $response = explode("\r\n\r\n", $response, 2); 
    116                              
    117                             return $response; 
    118                           } 
    119                          
    120                          
    121                          
    122                         function recaptcha_get_html($pubkey, $error = null, $use_ssl = false) 
    123                           { 
    124                             if ($pubkey == null || $pubkey == '') 
    125                               { 
    126                                 die("To use reCAPTCHA you must get an API key from <a href='https://www.google.com/recaptcha/admin/create'>https://www.google.com/recaptcha/admin/create</a>"); 
    127                               } 
    128                              
    129                             if ($use_ssl) 
    130                               { 
    131                                 $server = RECAPTCHA_API_SECURE_SERVER; 
    132                               } 
    133                             else 
    134                               { 
    135                                 $server = RECAPTCHA_API_SERVER; 
    136                               } 
    137                              
    138                             $errorpart = ""; 
    139                             if ($error) 
    140                               { 
    141                                 $errorpart = "&amp;error=" . $error; 
    142                               } 
    143                             return '<script type="text/javascript" src="' . $server . '/challenge?k=' . $pubkey . $errorpart . '"></script> 
     17 This program is free software; you can redistribute it and/or modify 
     18 it under the terms of the GNU General Public License, version 2, as  
     19 published by the Free Software Foundation. 
     20  
     21 This program is distributed in the hope that it will be useful, 
     22 but WITHOUT ANY WARRANTY; without even the implied warranty of 
     23 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
     24 GNU General Public License for more details. 
     25  
     26 You should have received a copy of the GNU General Public License 
     27 along with this program; if not, write to the Free Software 
     28 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA 
     29 */ 
     30 add_action('init', 'iosec', 1); 
     31  
     32 function iosec() 
     33 { 
     34 /////////////////////////////////// CONFIGURATION MENU /////////////////////////////////////////////// 
     35 $use_captcha                       = "y"; //If you want to use reCAPTCHA set value to "y" otherwise leave it empty (default is "y"). 
     36 $publickey                         = "6Ld6fNESAAAAAIM4YzckCmfqyzFOmrrTj2Qq55Tq"; // Get a key from https://www.google.com/recaptcha/admin/create 
     37 $privatekey                        = "6Ld6fNESAAAAAKWYKMAypEffxoUlpW8RZ5UYGmaK"; // Get a key from https://www.google.com/recaptcha/admin/create 
     38 $interval                          = 0.5; //Connection Interval in seconds (e.g. 1, 0.5, 0.001, etc.). 
     39 $conection_limit                   = 1; //Connection count in the interval value (e.g. 1, 3, 5, 100). 
     40 $block_proxies                     = ""; //If you want to block proxies set value to "y" otherwise leave it empty. 
     41 $refresh_timeout                   = 10; //Suspended Process Timeout value in seconds. 
     42 $redirection                       = ""; //If you want to redirect user after the suspended process, you can enter URL here. 
     43 $mail_info                         = ""; //Mail address to notify (admin mail). 
     44 $debug_info                        = "y"; //If you want to show debug info then set value to "y" otherwise leave it empty. 
     45 $behind_reverse_proxy              = ""; //If your web server behind a reverse proxy, set this value to "y". 
     46 $incremental_blocking              = "y"; //If you want to use incremental blocking, set this value to "y" (default is "y"). 
     47 $implicit_deny_timeout             = 0; // (Token access) If you want to block every request as default and let the human users to view page for a timeout period (seconds), set this value to greater than "0" (default is "0"). 
     48 $implicit_deny_for_banlist_timeout = 0; // (Token access) If you want to block every recorded IP that is listed in the banlist as default and let the human users to view page for a timeout period (seconds), set this value to greater than "0" (default is "0"). 
     49 $cached_requests                   = 150; //Monitoring data window size for the last requests (for "ips" file size) (default is "150"). 
     50 ///////////////////////////////////////////////////////////////////////////////////////////// 
     51 /////////////////////////////////////////////////////////////////////////////////////////// 
     52      
     53     /* 
     54     Do not change below  
     55     */ 
     56      
     57     if (!is_dir(WP_CONTENT_DIR . '/iosec_admin/')) { 
     58         mkdir(WP_CONTENT_DIR . '/iosec_admin/', 0, true); 
     59     } 
     60     if (substr(sprintf('%o', fileperms(WP_CONTENT_DIR . '/iosec_admin/')), -4) < 755) { 
     61         chmod(WP_CONTENT_DIR . '/iosec_admin/', 0755); 
     62     } 
     63      
     64     //Create .htaccess file... 
     65      
     66     if (!file_exists(WP_CONTENT_DIR . '/iosec_admin/.htaccess')) { 
     67         $icerik = "deny from all"; 
     68          
     69         $handle = fopen(WP_CONTENT_DIR . '/iosec_admin/.htaccess', 'w+'); 
     70         fwrite($handle, $icerik); 
     71         fclose($handle); 
     72     } 
     73     if (($behind_reverse_proxy == "y") && ($block_proxies == "y")) { 
     74         die("IOSEC - You can not use Reverse Proxy support with Proxy Blocking feature. Please choose only one of them"); 
     75     } 
     76     if ($interval >= $refresh_timeout) { 
     77         die("IOSEC - You can not use an \$interval value greater than or equal to \$refresh_timeout value."); 
     78     } 
     79     $banlisttemp = WP_CONTENT_DIR . '/iosec_admin/banlisttemp'; 
     80     $whitelist   = WP_CONTENT_DIR . '/iosec_admin/whitelist'; 
     81     $ips         = WP_CONTENT_DIR . '/iosec_admin/ips'; 
     82     $banlist     = WP_CONTENT_DIR . '/iosec_admin/banlist'; 
     83      
     84     define("RECAPTCHA_API_SERVER", "http://www.google.com/recaptcha/api"); 
     85     define("RECAPTCHA_API_SECURE_SERVER", "https://www.google.com/recaptcha/api"); 
     86     define("RECAPTCHA_VERIFY_SERVER", "www.google.com"); 
     87      
     88     function _recaptcha_qsencode($data) 
     89     { 
     90         $req = ""; 
     91         foreach ($data as $key => $value) 
     92             $req .= $key . '=' . urlencode(stripslashes($value)) . '&'; 
     93          
     94         $req = substr($req, 0, strlen($req) - 1); 
     95         return $req; 
     96     } 
     97      
     98      
     99      
     100     function _recaptcha_http_post($host, $path, $data, $port = 80) 
     101     { 
     102         $req = _recaptcha_qsencode($data); 
     103          
     104         $http_request = "POST $path HTTP/1.0\r\n"; 
     105         $http_request .= "Host: $host\r\n"; 
     106         $http_request .= "Content-Type: application/x-www-form-urlencoded;\r\n"; 
     107         $http_request .= "Content-Length: " . strlen($req) . "\r\n"; 
     108         $http_request .= "User-Agent: reCAPTCHA/PHP\r\n"; 
     109         $http_request .= "\r\n"; 
     110         $http_request .= $req; 
     111          
     112         $response = ''; 
     113         if (false == ($fs = @fsockopen($host, $port, $errno, $errstr, 10))) { 
     114             die('Could not open socket'); 
     115         } 
     116          
     117         fwrite($fs, $http_request); 
     118          
     119         while (!feof($fs)) 
     120             $response .= fgets($fs, 1160); 
     121         fclose($fs); 
     122         $response = explode("\r\n\r\n", $response, 2); 
     123          
     124         return $response; 
     125     } 
     126      
     127      
     128      
     129     function recaptcha_get_html($pubkey, $error = null, $use_ssl = false) 
     130     { 
     131         if ($pubkey == null || $pubkey == '') { 
     132             die("To use reCAPTCHA you must get an API key from <a href='https://www.google.com/recaptcha/admin/create'>https://www.google.com/recaptcha/admin/create</a>"); 
     133         } 
     134          
     135         if ($use_ssl) { 
     136             $server = RECAPTCHA_API_SECURE_SERVER; 
     137         } else { 
     138             $server = RECAPTCHA_API_SERVER; 
     139         } 
     140          
     141         $errorpart = ""; 
     142         if ($error) { 
     143             $errorpart = "&amp;error=" . $error; 
     144         } 
     145         return '<script type="text/javascript" src="' . $server . '/challenge?k=' . $pubkey . $errorpart . '"></script> 
    144146 
    145147    <noscript> 
     
    148150        <input type="hidden" name="recaptcha_response_field" value="manual_challenge"/> 
    149151    </noscript>'; 
    150                           } 
    151                          
    152                          
    153                          
    154                          
    155                         class ReCaptchaResponse 
    156                           { 
    157                             var $is_valid; 
    158                             var $error; 
    159                           } 
    160                          
    161                          
    162                         function recaptcha_check_answer($privkey, $remoteip, $challenge, $response, $extra_params = array()) 
    163                           { 
    164                             if ($privkey == null || $privkey == '') 
    165                               { 
    166                                 die("To use reCAPTCHA you must get an API key from <a href='https://www.google.com/recaptcha/admin/create'>https://www.google.com/recaptcha/admin/create</a>"); 
    167                               } 
    168                              
    169                             if ($remoteip == null || $remoteip == '') 
    170                               { 
    171                                 die("For security reasons, you must pass the remote ip to reCAPTCHA"); 
    172                               } 
    173                              
    174                              
    175                              
    176                             if ($challenge == null || strlen($challenge) == 0 || $response == null || strlen($response) == 0) 
    177                               { 
    178                                 $recaptcha_response           = new ReCaptchaResponse(); 
    179                                 $recaptcha_response->is_valid = false; 
    180                                 $recaptcha_response->error    = 'incorrect-captcha-sol'; 
    181                                 return $recaptcha_response; 
    182                               } 
    183                              
    184                             $response = _recaptcha_http_post(RECAPTCHA_VERIFY_SERVER, "/recaptcha/api/verify", array( 
    185                                 'privatekey' => $privkey, 
    186                                 'remoteip' => $remoteip, 
    187                                 'challenge' => $challenge, 
    188                                 'response' => $response 
    189                             ) + $extra_params); 
    190                              
    191                             $answers            = explode("\n", $response[1]); 
    192                             $recaptcha_response = new ReCaptchaResponse(); 
    193                              
    194                             if (trim($answers[0]) == 'true') 
    195                               { 
    196                                 $recaptcha_response->is_valid = true; 
    197                               } 
    198                             else 
    199                               { 
    200                                 $recaptcha_response->is_valid = false; 
    201                                 $recaptcha_response->error    = $answers[1]; 
    202                               } 
    203                             return $recaptcha_response; 
    204                              
    205                           } 
    206                          
    207                         function recaptcha_get_signup_url($domain = null, $appname = null) 
    208                           { 
    209                             return "https://www.google.com/recaptcha/admin/create?" . _recaptcha_qsencode(array( 
    210                                 'domains' => $domain, 
    211                                 'app' => $appname 
    212                             )); 
    213                           } 
    214                          
    215                         function _recaptcha_aes_pad($val) 
    216                           { 
    217                             $block_size = 16; 
    218                             $numpad     = $block_size - (strlen($val) % $block_size); 
    219                             return str_pad($val, strlen($val) + $numpad, chr($numpad)); 
    220                           } 
    221                          
    222                          
    223                          
    224                          
    225                         $resp  = null; 
    226                         $error = null; 
    227                          
    228      
    229     if (($behind_reverse_proxy == "y") && ($block_proxies <> "y")) 
    230       { 
    231         $REMOTE_ADDR = $_SERVER['HTTP_X_FORWARDED_FOR']; 
    232       } 
    233     else 
    234       { 
    235         $REMOTE_ADDR = $_SERVER['REMOTE_ADDR']; 
    236       } 
    237     function isValidIP($ip) 
    238       { 
    239         $pattern = "/^([1]?\d{1,2}|2[0-4]{1}\d{1}|25[0-5]{1})(\.([1]?\d{1,2}|2[0-4]{1}\d{1}|25[0-5]{1})){3}$/"; 
    240         return (preg_match($pattern, $ip) > 0) ? true : false; 
    241       } 
    242     if (isValidIP($_SERVER['HTTP_VIA'])) 
    243       { 
    244         $HTTP_VIA = $_SERVER['HTTP_VIA']; 
    245       } 
    246     else 
    247       { 
    248         $HTTP_VIA = ""; 
    249       } 
    250     if (isValidIP($_SERVER['HTTP_X_FORWARDED_FOR'])) 
    251       { 
    252         $HTTP_X_FORWARDED_FOR = $_SERVER['HTTP_X_FORWARDED_FOR']; 
    253       } 
    254     else 
    255       { 
    256         $HTTP_X_FORWARDED_FOR = ""; 
    257       } 
    258     $let_it_go = 0; 
    259      
    260     if (!file_exists($whitelist)) { 
    261     fopen($whitelist, 'a'); 
    262         
    263 }  
    264        if (!is_writable ($banlisttemp)) { 
    265     fopen($banlisttemp, 'a'); 
    266          
    267 }  
    268      if (!is_writable ($banlist)) { 
    269     fopen($banlist, 'a'); 
    270          
    271 }  
    272  if (!is_writable ($ips)) { 
    273     fopen($ips, 'a'); 
    274          
    275 }  
    276      
    277     $read_whitelist = implode('\n', file($whitelist)); 
    278      
    279     if (eregi($REMOTE_ADDR, $read_whitelist)) 
    280       { 
    281         $let_it_go = 1; 
    282       } 
    283  
    284     if ($let_it_go == 0) 
    285       { 
    286  
    287  
    288         $linesx = file($banlisttemp); 
    289         foreach ($linesx as $teksira) 
    290           { 
    291             $ipcheck = explode('|', $teksira); 
    292           } 
    293         $connection_count = 1; 
    294         $saniye           = (time() + microtime()); 
    295         $adres            = $REMOTE_ADDR; 
    296         $dosya            = $ips; 
    297         $dosya_ac         = fopen($dosya, 'r'); 
    298         $oku              = fgets($dosya_ac, ($cached_requests * 30)); 
    299         fclose($dosya_ac); 
    300         $sira         = explode(">", $oku); 
    301         $array        = $sira[0] + 1; 
    302         $array_gokhan = explode(";", $sira[1]); 
    303         for ($i = 0; $i < $cached_requests; $i++) 
    304           { 
    305             $ayikla = explode("|", $array_gokhan[$i]); 
    306             if ($HTTP_VIA > "") 
    307               { 
    308                 $kaynak = $HTTP_X_FORWARDED_FOR; 
    309               } 
    310             else 
    311               { 
    312                 $kaynak = $REMOTE_ADDR; 
    313               } 
    314             if (($kaynak == $ayikla[0] and (time() + microtime()) < $ayikla[2] + $interval) or (($ipcheck[0] == $adres) && ($ipcheck[1] + $refresh_timeout + 0.0 >= (time() + microtime())))) 
    315               { 
    316                 $array_gokhan[$i] = "$adres|" . $connection_count++ . "|$saniye"; 
    317                 if ($connection_count > $conection_limit) 
    318                   { 
     152     } 
     153      
     154      
     155      
     156      
     157     class ReCaptchaResponse 
     158     { 
     159         var $is_valid; 
     160         var $error; 
     161     } 
     162      
     163      
     164     function recaptcha_check_answer($privkey, $remoteip, $challenge, $response, $extra_params = array()) 
     165     { 
     166         if ($privkey == null || $privkey == '') { 
     167             die("To use reCAPTCHA you must get an API key from <a href='https://www.google.com/recaptcha/admin/create'>https://www.google.com/recaptcha/admin/create</a>"); 
     168         } 
     169          
     170         if ($remoteip == null || $remoteip == '') { 
     171             die("For security reasons, you must pass the remote ip to reCAPTCHA"); 
     172         } 
     173          
     174          
     175          
     176         if ($challenge == null || strlen($challenge) == 0 || $response == null || strlen($response) == 0) { 
     177             $recaptcha_response           = new ReCaptchaResponse(); 
     178             $recaptcha_response->is_valid = false; 
     179             $recaptcha_response->error    = 'incorrect-captcha-sol'; 
     180             return $recaptcha_response; 
     181         } 
     182          
     183         $response = _recaptcha_http_post(RECAPTCHA_VERIFY_SERVER, "/recaptcha/api/verify", array( 
     184             'privatekey' => $privkey, 
     185             'remoteip' => $remoteip, 
     186             'challenge' => $challenge, 
     187             'response' => $response 
     188         ) + $extra_params); 
     189          
     190         $answers            = explode("\n", $response[1]); 
     191         $recaptcha_response = new ReCaptchaResponse(); 
     192          
     193         if (trim($answers[0]) == 'true') { 
     194             $recaptcha_response->is_valid = true; 
     195         } else { 
     196             $recaptcha_response->is_valid = false; 
     197             $recaptcha_response->error    = $answers[1]; 
     198         } 
     199         return $recaptcha_response; 
     200          
     201     } 
     202      
     203     function recaptcha_get_signup_url($domain = null, $appname = null) 
     204     { 
     205         return "https://www.google.com/recaptcha/admin/create?" . _recaptcha_qsencode(array( 
     206             'domains' => $domain, 
     207             'app' => $appname 
     208         )); 
     209     } 
     210      
     211     function _recaptcha_aes_pad($val) 
     212     { 
     213         $block_size = 16; 
     214         $numpad     = $block_size - (strlen($val) % $block_size); 
     215         return str_pad($val, strlen($val) + $numpad, chr($numpad)); 
     216     } 
     217      
     218      
     219      
     220      
     221     $resp  = null; 
     222     $error = null; 
     223      
     224      
     225     if (($behind_reverse_proxy == "y") && ($block_proxies <> "y")) { 
     226         $REMOTE_ADDR = $_SERVER['HTTP_X_FORWARDED_FOR']; 
     227     } else { 
     228         $REMOTE_ADDR = $_SERVER['REMOTE_ADDR']; 
     229     } 
     230     function isValidIP($ip) 
     231     { 
     232         $pattern = "/^([1]?\d{1,2}|2[0-4]{1}\d{1}|25[0-5]{1})(\.([1]?\d{1,2}|2[0-4]{1}\d{1}|25[0-5]{1})){3}$/"; 
     233         return (preg_match($pattern, $ip) > 0) ? true : false; 
     234     } 
     235     if (isValidIP($_SERVER['HTTP_VIA'])) { 
     236         $HTTP_VIA = $_SERVER['HTTP_VIA']; 
     237     } else { 
     238         $HTTP_VIA = ""; 
     239     } 
     240     if (isValidIP($_SERVER['HTTP_X_FORWARDED_FOR'])) { 
     241         $HTTP_X_FORWARDED_FOR = $_SERVER['HTTP_X_FORWARDED_FOR']; 
     242     } else { 
     243         $HTTP_X_FORWARDED_FOR = ""; 
     244     } 
     245     $let_it_go = 0; 
     246      
     247     if (!file_exists($whitelist)) { 
     248         fopen($whitelist, 'a'); 
     249          
     250     } 
     251     if (!is_writable($banlisttemp)) { 
     252         fopen($banlisttemp, 'a'); 
     253          
     254     } 
     255     if (!is_writable($banlist)) { 
     256         fopen($banlist, 'a'); 
     257          
     258     } 
     259     if (!is_writable($ips)) { 
     260         fopen($ips, 'a'); 
     261          
     262     } 
     263     $read_blacklist = implode('\n', file($banlist)); 
     264     $read_whitelist = implode('\n', file($whitelist)); 
     265      
     266     if (eregi($REMOTE_ADDR, $read_whitelist)) { 
     267         $let_it_go = 1; 
     268     } 
     269      
     270     if ($let_it_go == 0) { 
     271         if (eregi($REMOTE_ADDR, $read_blacklist) && ($implicit_deny_for_banlist_timeout > 0)) { 
     272             $implicit_deny_timeout = $implicit_deny_for_banlist_timeout; 
     273         } 
     274          
     275         $linesx = file($banlisttemp); 
     276         foreach ($linesx as $teksira) { 
     277             $ipcheck = explode('|', $teksira); 
     278         } 
     279         $connection_count = 1; 
     280         $saniye           = (time() + microtime()); 
     281         $adres            = $REMOTE_ADDR; 
     282         $dosya            = $ips; 
     283         $dosya_ac         = fopen($dosya, 'r'); 
     284         $oku              = fgets($dosya_ac, ($cached_requests * 30)); 
     285         fclose($dosya_ac); 
     286         $sira         = explode(">", $oku); 
     287         $array        = $sira[0] + 1; 
     288         $array_gokhan = explode(";", $sira[1]); 
     289         for ($i = 0; $i < $cached_requests; $i++) { 
     290             $ayikla = explode("|", $array_gokhan[$i]); 
     291             if ($HTTP_VIA > "") { 
     292                 $kaynak = $HTTP_X_FORWARDED_FOR; 
     293             } else { 
     294                 $kaynak = $REMOTE_ADDR; 
     295             } 
     296             if (($kaynak == $ayikla[0] and (time() + microtime()) < $ayikla[2] + $interval) or (($ipcheck[0] == $adres) && ($ipcheck[1] + $refresh_timeout + 0.0 >= (time() + microtime())))) { 
     297                 $array_gokhan[$i] = "$adres|" . $connection_count++ . "|$saniye"; 
     298                 if ($connection_count > $conection_limit) { 
    319299?> 
    320300<head> 
     
    323303<meta http-equiv="Content-Language" content="tr"> 
    324304<meta http-equiv="Refresh" content="<?php 
    325                     echo $refresh_timeout; 
     305                     echo $refresh_timeout; 
    326306?>; url=<?php 
    327                     echo $redirection; 
     307                     echo $redirection; 
    328308?>"> 
    329309<title>IOSec.org Anti Flood Security Gateway Module</title> 
     
    334314<script> 
    335315var count=<?php 
    336                     echo $refresh_timeout; 
     316                     echo $refresh_timeout; 
    337317?>; 
    338318 
     
    360340                    <p> 
    361341                    <br> 
    362                     <img border="0" src=<?php echo(plugin_dir_url(__FILE__)."iosec_content/logo.png"); ?> ></p> 
     342                    <img border="0" src=<?php 
     343                     echo (plugin_dir_url(__FILE__) . "iosec_content/logo.png"); 
     344?> ></p> 
    363345                    <table border="0" width="336" id="table1" cellspacing="1"  height="66"> 
    364346                        <tr> 
     
    380362                    </div> 
    381363                <p> 
    382  
     364<p>&nbsp;</p> 
    383365</table> 
    384366<p>&nbsp;</p> 
    385367 
    386368<?php 
    387                     for ($e = 0; $e < $cached_requests; $e++) 
    388                       { 
    389                         $veri_handler = "$veri_handler;$array_gokhan[$e]"; 
    390                       } 
    391                     $g_muharremoglu = fopen($dosya, 'w'); 
    392                     $veri_handler   = "$sira[0]>$veri_handler"; 
    393                     fputs($g_muharremoglu, "$veri_handler"); 
    394                     fclose($g_muharremoglu); 
    395                      
    396                     if (($ipcheck[0] == $adres) && ($ipcheck[1] + $refresh_timeout >= (time() + microtime()))) 
    397                       { 
    398                         $logfile = $banlist; 
    399                         $read    = implode('\n', file($logfile)); 
    400                          
    401                         if (eregi($adres, $read)) 
    402                           { 
    403                           } 
    404                         else 
    405                           { 
    406                             $htaccess2 = fopen($banlist, 'a'); 
    407                             fwrite($htaccess2, $adres . "\n"); 
    408                             fclose($htaccess2); 
    409                             if ($mail_yolla <> "") 
    410                               { 
    411                                 mail($mail_yolla, "$adres", "http://" . $_SERVER['HTTP_HOST'] . "/" . $_SERVER['PATH_INFO'] . $banlist, "From: IOSEC Anti Flood <iosec@" . $_SERVER['HTTP_HOST'] . ">\r\n"); 
    412                               } 
    413                           } 
    414                          
    415                       } 
    416                     else 
    417                       { 
    418                         $htaccess = fopen($banlisttemp, 'a+'); 
    419                         if (filesize($banlisttemp) > ($cached_requests * 30)) 
    420                           { 
    421                             fopen($banlisttemp, 'w'); 
    422                           } 
    423                         fwrite($htaccess, $adres . "|" . (time() + microtime()) . "\n"); 
    424                         fclose($htaccess); 
    425                          
    426                       } 
    427                     $hatali = 1; 
    428                     if ($use_captcha == "y") 
    429                       { 
     369                     for ($e = 0; $e < $cached_requests; $e++) { 
     370                         $veri_handler = "$veri_handler;$array_gokhan[$e]"; 
     371                     } 
     372                     $g_muharremoglu = fopen($dosya, 'w'); 
     373                     $veri_handler   = "$sira[0]>$veri_handler"; 
     374                     fputs($g_muharremoglu, "$veri_handler"); 
     375                     fclose($g_muharremoglu); 
     376                      
     377                     if (($ipcheck[0] == $adres) && ($ipcheck[1] + $refresh_timeout >= (time() + microtime()))) { 
     378                         $logfile = $banlist; 
     379                         $read    = implode('\n', file($logfile)); 
     380                          
     381                         if (eregi($adres, $read)) { 
     382                         } else { 
     383                             $htaccess2 = fopen($banlist, 'a'); 
     384                             fwrite($htaccess2, $adres . "\n"); 
     385                             fclose($htaccess2); 
     386                             if ($mail_yolla <> "") { 
     387                                 mail($mail_yolla, "$adres", "http://" . $_SERVER['HTTP_HOST'] . "/" . $_SERVER['PATH_INFO'] . $banlist, "From: IOSEC Anti Flood <iosec@" . $_SERVER['HTTP_HOST'] . ">\r\n"); 
     388                             } 
     389                         } 
     390                          
     391                     } else { 
     392                         $htaccess = fopen($banlisttemp, 'a+'); 
     393                         if (filesize($banlisttemp) > ($cached_requests * 30)) { 
     394                             fopen($banlisttemp, 'w'); 
     395                         } 
     396                         fwrite($htaccess, $adres . "|" . (time() + microtime()) . "\n"); 
     397                         fclose($htaccess); 
     398                          
     399                     } 
     400                     $hatali = 1; 
     401                     if ($use_captcha == "y") { 
    430402?> 
    431403 
     
    434406    <form action="" method="post"> 
    435407<?php 
    436   
    437                         if ($_POST["recaptcha_response_field"]) 
    438                           { 
    439                             $resp = recaptcha_check_answer($privatekey, $_SERVER["REMOTE_ADDR"], $_POST["recaptcha_challenge_field"], $_POST["recaptcha_response_field"]); 
    440                              
    441                             if ($resp->is_valid) 
    442                               { 
    443                                 $hatali = 0; 
    444                                  
    445                                 $htaccess = fopen($banlisttemp, 'a+'); 
    446                                 fwrite($htaccess, $adres . "|" . (time() + microtime() - $refresh_timeout) . "\n"); 
    447                                 fclose($htaccess); 
    448                                 echo "<meta http-equiv=\"Refresh\" content=\"" . ($interval + 1) . "; url=\">"; 
    449                                 exit; 
    450                               } 
    451                             else 
    452                               { 
    453                                 $error = $resp->error; 
    454                                  
    455                                  
    456                               } 
    457                           } 
    458                          
    459                         echo recaptcha_get_html($publickey, $error); 
     408                          
     409                         if ($_POST["recaptcha_response_field"]) { 
     410                             $resp = recaptcha_check_answer($privatekey, $_SERVER["REMOTE_ADDR"], $_POST["recaptcha_challenge_field"], $_POST["recaptcha_response_field"]); 
     411                              
     412                             if ($resp->is_valid) { 
     413                                 $hatali = 0; 
     414                                  
     415                                 $htaccess = fopen($banlisttemp, 'a+'); 
     416                                 fwrite($htaccess, $adres . "|" . (time() + microtime() - $refresh_timeout) . "\n"); 
     417                                 fclose($htaccess); 
     418                                 echo "<meta http-equiv=\"Refresh\" content=\"" . ($interval + 1) . "; url=\">"; 
     419                                 exit; 
     420                             } else { 
     421                                 $error = $resp->error; 
     422                                  
     423                                  
     424                             } 
     425                         } 
     426                          
     427                         echo recaptcha_get_html($publickey, $error); 
    460428?> 
    461429  <br/> 
     
    465433</html> 
    466434<?php 
    467                       } 
    468                     if (($error <> null) || ($hatali == 1)) 
    469                       { 
    470                         if ($debug_info == "y") 
    471                           { 
    472                             echo "Debug Info<br>"; 
    473                             echo "IP Address: " . $REMOTE_ADDR . "<br>"; 
    474                             echo "Microsecond: " . (time() + microtime()); 
    475                           } 
    476                         if ($incremental_blocking == "y") 
    477                           { 
    478                             $htaccess = fopen($banlisttemp, 'a+'); 
    479                             if (filesize($banlisttemp) > ($cached_requests * 30)) 
    480                               { 
    481                                 fopen($banlisttemp, 'w'); 
    482                               } 
    483                             fwrite($htaccess, $adres . "|" . (time() + microtime()) . "\n"); 
    484                             fclose($htaccess); 
    485                              
    486                           } 
    487                         exit; 
    488                       } 
    489                      
    490  
    491                   } 
    492               } 
    493           } 
    494         $array_gokhan[$array] = "$adres|$connection_count|$saniye"; 
    495         for ($e = 1; $e < $cached_requests; $e++) 
    496           { 
    497             $veri_handler = "$veri_handler;$array_gokhan[$e]"; 
    498           } 
    499         if ($array > $cached_requests) 
    500           { 
    501             $array = 1; 
    502           } 
    503         $write_it       = "$array>$veri_handler"; 
    504         $g_muharremoglu = fopen($dosya, 'w'); 
    505         fputs($g_muharremoglu, $write_it); 
    506         fclose($g_muharremoglu); 
    507          
    508               if (!isset($_SESSION) && $implicit_deny_timeout > 0) { 
    509                                     session_start(); 
    510                                 } 
    511     if (($block_proxies == "y" and $HTTP_VIA > "") or ($implicit_deny_timeout > 0 and $_SESSION['unblocked_time'] < time()  )) 
    512       { 
    513       
     435                     } 
     436                     if (($error <> null) || ($hatali == 1)) { 
     437                         if ($debug_info == "y") { 
     438                             echo "Debug Info<br>"; 
     439                             echo "IP Address: " . $REMOTE_ADDR . "<br>"; 
     440                             echo "Microsecond: " . (time() + microtime()); 
     441                         } 
     442                         if ($incremental_blocking == "y") { 
     443                             $htaccess = fopen($banlisttemp, 'a+'); 
     444                             if (filesize($banlisttemp) > ($cached_requests * 30)) { 
     445                                 fopen($banlisttemp, 'w'); 
     446                             } 
     447                             fwrite($htaccess, $adres . "|" . (time() + microtime()) . "\n"); 
     448                             fclose($htaccess); 
     449                              
     450                         } 
     451                         exit; 
     452                     } 
     453                      
     454                      
     455                 } 
     456             } 
     457         } 
     458         $array_gokhan[$array] = "$adres|$connection_count|$saniye"; 
     459         for ($e = 1; $e < $cached_requests; $e++) { 
     460             $veri_handler = "$veri_handler;$array_gokhan[$e]"; 
     461         } 
     462         if ($array > $cached_requests) { 
     463             $array = 1; 
     464         } 
     465         $write_it       = "$array>$veri_handler"; 
     466         $g_muharremoglu = fopen($dosya, 'w'); 
     467         fputs($g_muharremoglu, $write_it); 
     468         fclose($g_muharremoglu); 
     469          
     470         if (!isset($_SESSION) && $implicit_deny_timeout > 0) { 
     471             session_start(); 
     472         } 
     473         if (($block_proxies == "y" and $HTTP_VIA > "") or ($implicit_deny_timeout > 0 and $_SESSION['unblocked_time'] < time())) { 
    514474?> 
    515475<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-9" /> 
     
    538498                                </div> 
    539499<?php 
    540       if ($use_captcha == "y") 
    541                   { 
     500             if ($use_captcha == "y") { 
    542501?> 
    543502 
     
    546505    <form action="" method="post"> 
    547506<?php 
    548  
    549                     if ($_POST["recaptcha_response_field"]) 
    550                       { 
    551                         $resp = recaptcha_check_answer($privatekey, $_SERVER["REMOTE_ADDR"], $_POST["recaptcha_challenge_field"], $_POST["recaptcha_response_field"]); 
    552                         if ($resp->is_valid) 
    553                           { 
    554                             
    555                             $_SESSION['unblocked_time'] = time() + $implicit_deny_timeout; 
    556                             echo "<meta http-equiv=\"Refresh\" content=\"" . ($interval + 1) . "; url=\">"; 
    557                             exit; 
    558                           } 
    559                         else 
    560                           { 
    561                             $error = $resp->error; 
    562                           } 
    563                       } 
    564                     echo recaptcha_get_html($publickey, $error); 
     507                  
     508                 if ($_POST["recaptcha_response_field"]) { 
     509                     $resp = recaptcha_check_answer($privatekey, $_SERVER["REMOTE_ADDR"], $_POST["recaptcha_challenge_field"], $_POST["recaptcha_response_field"]); 
     510                     if ($resp->is_valid) { 
     511                         $_SESSION['unblocked_time'] = time() + $implicit_deny_timeout; 
     512                         echo "<meta http-equiv=\"Refresh\" content=\"" . ($interval + 1) . "; url=\">"; 
     513                         exit; 
     514                     } else { 
     515                         $error = $resp->error; 
     516                     } 
     517                 } 
     518                 echo recaptcha_get_html($publickey, $error); 
    565519?> 
    566520  <br/> 
     
    570524</html> 
    571525<?php 
    572 } 
    573             exit; 
    574           } 
    575       } 
    576   } 
    577 ?> 
     526             } 
     527             exit; 
     528         } 
     529     } 
     530 } 
     531?> 
  • iosec-anti-flood-security-gateway-module/trunk/readme.txt

    r588838 r600093  
    44Tags: anti flood, iosec, security, gateway, module, plugin, admin, http flood, gokhan muharremoglu, anti dos, hack, firewall, protection, spam, captcha, brute force, flood guard, stable 
    55Requires at least: 2.0.2 
    6 Tested up to: 3.4.1 
    7 Stable tag: 1.7 
     6Tested up to: 3.4.2 
     7Stable tag: 1.8 
    88License: GPLv2 or later 
    99License URI: http://www.gnu.org/licenses/gpl-2.0.html 
     
    929210. Cached Requests:  Monitoring data window size for last requests (for "ips" file size) (default is "150").  
    9393 
    94 CHANGES v.1.5 - v.1.7 
     9411. Implicit Deny for banlist Timeout: If you want to block every recorded IP that is listed in the banlist as default and let the human users to view page for a timeout period (seconds), set this value to greater than "0" (default is "0"). 
     95 
     96 
     97CHANGES v.1.5 - v.1.8 
    9598------------------------------------------------- 
     99- Added Implicit Deny for the Banned IP Addresses 
    96100- Added Request Cache Size Option 
    97101- Added Excluded Files Support 
Note: See TracChangeset for help on using the changeset viewer.