Файл: modules/proxy-protection.php
Строк: 83
<?php
//Proxy Protection
$table = $prefix . 'proxy-settings';
$query = $mysqli->query("SELECT * FROM `$table`");
$row   = $query->fetch_assoc();
$cache_file = __DIR__ . "/cache/proxy/". $ip .".json";
//Method 1
if ($row['protection'] > 0) {
    
    $proxyv = 0;
    
    if ($row['protection'] == 1) {
        
        if (psec_getcache($ip, $cache_file) == 'PSEC_NoCache') {
            $key = $row['api1'];
            
            $ch  = curl_init();
            $url = 'http://v2.api.iphub.info/ip/' . $ip . '';
            curl_setopt_array($ch, [
                CURLOPT_URL => $url,
                CURLOPT_CONNECTTIMEOUT => 30,
                CURLOPT_RETURNTRANSFER => true,
                CURLOPT_HTTPHEADER => [ "X-Key: {$key}" ]
            ]);
            $choutput = curl_exec($ch);
            @$block   = json_decode($choutput)->block;
            curl_close($ch);
            
            // Grabs API Response and Caches
            file_put_contents($cache_file, $choutput);
        } else {
            @$block = json_decode(psec_getcache($ip, $cache_file))->block;
        }
        
        if ($block == 1) {
            $proxyv = 1;
        }
        
    } else if ($row['protection'] == 2) {
        
        if (psec_getcache($ip, $cache_file) == 'PSEC_NoCache') {
            $key = $row['api2'];
            
            $ch           = curl_init('http://proxycheck.io/v2/' . $ip . '?key=' . $key . '&vpn=1');
            $curl_options = array(
                CURLOPT_CONNECTTIMEOUT => 30,
                CURLOPT_RETURNTRANSFER => true
            );
            curl_setopt_array($ch, $curl_options);
            $response = curl_exec($ch);
            curl_close($ch);
            $jsonc = json_decode($response);
            
            // Grabs API Response and Caches
            file_put_contents($cache_file, $response);
        } else {
            $jsonc = json_decode(psec_getcache($ip, $cache_file));
        }
        
        if (isset($jsonc->$ip->proxy) && $jsonc->$ip->proxy == "yes") {
            $proxyv = 1;
        }
        
    } else if ($row['protection'] == 3) {
        
        if (psec_getcache($ip, $cache_file) == 'PSEC_NoCache') {
            $key = $row['api3'];
            
            $headers = [
                'X-Key: '.$key,
            ];
            $ch = curl_init("https://www.iphunter.info:8082/v1/ip/" . $ip);
            curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
            
            $choutput    = curl_exec($ch);
            $output      = json_decode($choutput, 1);
            $http_status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
            curl_close($ch);
            
            if ($http_status == 200) {
                if ($output['data']['block'] == 1) {
                    $proxyv = 1;
                }
                
                // Grabs API Response and Caches
                file_put_contents($cache_file, $choutput);
            }
        } else {
            $output = json_decode(psec_getcache($ip, $cache_file), 1);
            
            if ($output['data']['block'] == 1) {
                $proxyv = 1;
            }
        }
        
    } else if ($row['protection'] == 4) {
        
        if (psec_getcache($ip, $cache_file) == 'PSEC_NoCache') {
            
            $url = 'http://blackbox.ipinfo.app/lookup/' . $ip;
            $ch  = curl_init();
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
            curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
            curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate');
            curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
            curl_setopt($ch, CURLOPT_REFERER, "https://google.com");
            $proxyresponse = curl_exec($ch);
            $httpCode = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
            curl_close($ch);
            
            if ($proxyresponse == 'Y') {
                $proxyv = 1;
                
            }
            
            // Grabs API Response and Caches
            file_put_contents($cache_file, $proxyresponse);
        } else {
            $proxyresponse = psec_getcache($ip, $cache_file);
            
            if ($proxyresponse == 'Y') {
                $proxyv = 1;
            }
        }
        
    }
    
    if ($proxyv == 1) {
        
        $type = "Proxy";
        
        //Logging
        if ($row['logging'] == 1) {
            psec_logging($mysqli, $prefix, $type);
        }
        
        //AutoBan
        if ($row['autoban'] == 1) {
            psec_autoban($mysqli, $prefix, $type);
        }
        
        //E-Mail Notification
        if ($srow['mail_notifications'] == 1 && $row['mail'] == 1) {
            psec_mail($mysqli, $prefix, $site_url, $projectsecurity_path, $type, $srow['email']);
        }
        
        echo '<meta http-equiv="refresh" content="0;url=' . $row['redirect'] . '?element=api' . $row['protection'] . '" />';
        exit;
    }
}
//Method 2
if ($row['protection2'] == 1) {
    $proxy_headers = array(
        'HTTP_VIA',
        'HTTP_X_FORWARDED_FOR',
        'HTTP_FORWARDED_FOR',
        'HTTP_X_FORWARDED',
        'HTTP_X_FORWARDED_HOST',
        'HTTP_FORWARDED',
        'HTTP_FORWARDED_FOR_IP',
        'HTTP_FORWARDED_PROTO',
        'HTTP_PROXY_CONNECTION'
    );
    foreach ($proxy_headers as $x) {
        if (isset($_SERVER[$x])) {
            
            $type = "Proxy";
            
            //Logging
            if ($row['logging'] == 1) {
                psec_logging($mysqli, $prefix, $type);
            }
            
            //AutoBan
            if ($row['autoban'] == 1) {
                psec_autoban($mysqli, $prefix, $type);
            }
            
            //E-Mail Notification
            if ($srow['mail_notifications'] == 1 && $row['mail'] == 1) {
                psec_mail($mysqli, $prefix, $site_url, $projectsecurity_path, $type, $srow['email']);
            }
            
            echo '<meta http-equiv="refresh" content="0;url=' . $row['redirect'] . '?element=' . $x . '" />';
            exit;
        }
    }
}
?>