diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/bot_protection.php | 106 |
1 files changed, 53 insertions, 53 deletions
diff --git a/lib/bot_protection.php b/lib/bot_protection.php index 5a823e0..465190f 100644 --- a/lib/bot_protection.php +++ b/lib/bot_protection.php @@ -1,12 +1,12 @@ <?php class bot_protection{ - + public function __construct($frontend, $get, $filters, $page, $output){ - + // check if we want captcha if(config::BOT_PROTECTION !== 1){ - + apcu_inc("real_requests"); if($output === true){ $frontend->loadheader( @@ -17,12 +17,12 @@ class bot_protection{ } return; } - + /* Validate cookie, if it exists */ if(isset($_COOKIE["pass"])){ - + if( // check if key is not malformed preg_match( @@ -32,22 +32,22 @@ class bot_protection{ // does key exist apcu_exists($_COOKIE["pass"]) ){ - + // exists, increment counter $inc = apcu_inc($_COOKIE["pass"]); - + // we start counting from 1 // when it has been incremented to 102, it has reached // 100 reqs if($inc >= config::MAX_SEARCHES + 2){ - + // reached limit, delete and give captcha apcu_delete($_COOKIE["pass"]); }else{ - + // the cookie is OK! dont die() and give results apcu_inc("real_requests"); - + if($output === true){ $frontend->loadheader( $get, @@ -59,16 +59,16 @@ class bot_protection{ } } } - + if($output === false){ - + http_response_code(401); // forbidden echo json_encode([ "status" => "The \"pass\" token in your cookies is missing or has expired!!" ]); die(); } - + /* Validate form data */ @@ -84,26 +84,26 @@ class bot_protection{ $error = ""; foreach($lines as $line){ - + $line = explode("=", $line, 2); - + if(count($line) !== 2){ - + $invalid = true; break; } - + preg_match( '/^c\[([0-9]+)\]$/', $line[0], $regex ); - + if( $line[1] != "on" || !isset($regex[0][1]) ){ - + // check if its the v key if( $line[0] == "v" && @@ -112,61 +112,61 @@ class bot_protection{ $line[1] ) ){ - + $key = apcu_fetch($line[1]); apcu_delete($line[1]); } break; } - + $regex = (int)$regex[1]; - + if( $regex >= 16 || $regex <= -1 ){ - + $invalid = true; break; } - + $answers[] = $regex; } - + // dedup $answers = array_unique($answers); - + if( !$invalid && $key !== false // has captcha been gen'd? ){ $check = count($key); - + // validate answer for($i=0; $i<count($answers); $i++){ - + if(in_array($answers[$i], $key)){ - + $check--; }else{ - + $check = -1; break; } } - + if($check === 0){ - + // we passed the captcha // set cookie $inc = apcu_inc("cookie"); - + $key = "k" . $inc . "." . $this->randomchars(); - + apcu_inc($key, 1, $stupid, 86400); - + apcu_inc("real_requests"); - + setcookie( "pass", $key, @@ -176,22 +176,22 @@ class bot_protection{ "path" => "/" ] ); - + $frontend->loadheader( $get, $filters, $page ); return; - + }else{ - - $error = "<div class=\"quote\">You were <a href=\"https://www.youtube.com/watch?v=e1d7fkQx2rk\" target=\"_BLANK\" rel=\"noreferrer nofollow\">kicked out of Mensa.</a> Please try again.</div>"; + + $error = "<div class=\"quote\">You got it wrong lol. Try again.</div>"; } } - + $key = "c" . apcu_inc("captcha_gen", 1) . "." . $this->randomchars(); - + $payload = [ "timetaken" => microtime(true), "class" => "", @@ -201,7 +201,7 @@ class bot_protection{ '<div class="infobox">' . '<h1>IQ test</h1>' . 'IQ test has been enabled due to bot abuse on the network.<br>' . - 'Solving this IQ test will let you make 100 searches today. I will add an invite system to bypass this soon...' . + 'Solving this IQ test will let you make 300 searches today.' . $error . '<form method="POST" enctype="text/plain" autocomplete="off">' . '<div class="captcha-wrapper">' . @@ -248,37 +248,37 @@ class bot_protection{ '</form>' . '</div>' ]; - + $frontend->loadheader( $get, $filters, $page ); - + echo $frontend->load("search.html", $payload); die(); } - + private function randomchars(){ - + $chars = array_merge( range("A", "Z"), range("a", "z"), range(0, 9) ); - + $chars[] = "_"; - + $c = count($chars) - 1; - + $key = ""; - + for($i=0; $i<20; $i++){ - + $key .= $chars[random_int(0, $c)]; } - + return $key; } } |
