From dfc8b403b327e8bacc14b40c0c52fff2ac9843ad Mon Sep 17 00:00:00 2001 From: pero1203 Date: Mon, 21 Sep 2020 14:01:46 +0200 Subject: [PATCH] Dodana omejitev klikov/minuto pri izpolnjevanju dolocene ankete (zaenkrat 100) --- function.php | 69 +++++++++++++++++++++++++++++++++++++++++++------ sql/update2.sql | 11 ++++++++ 2 files changed, 72 insertions(+), 8 deletions(-) diff --git a/function.php b/function.php index 76ab97b40..970edaca8 100644 --- a/function.php +++ b/function.php @@ -248,13 +248,6 @@ if ($admin_type > -1) { } -// Sledenje spremembam (tracker) -// deluje tudi v adminu... -/*if ($global_user_id != 0) { - sisplet_query("INSERT INTO user_tracker (uid, timestamp, what) VALUES ('$global_user_id', '" . time() . "', '" . $_SERVER["REQUEST_URI"] . "')"); -}*/ - - // Preverimo ce je spremenljivka countable (zaradi ogromno warningov v kodi, kjer se counta prazno spremenljivko) if (!function_exists('is_countable')) { function is_countable($var) { @@ -263,12 +256,21 @@ if (!function_exists('is_countable')) { } +// Preverimo klike na minuto pri izpolnjevanju anekte da se ne zapolni sql +if(!checkClicksPerMinute()){ + + http_response_code(425); + echo '

Service Unavailable.

'; + + die(); +} + + // Preverimo tip hierarhije $hierarhija_type = preveriTipHierarhije(); - /******* SPLOSNE FUNKCIJE *******/ // Skrajsa string, in ga odreze lepo za besedo in ne kar vmes :) @@ -1143,4 +1145,55 @@ function root_dir($file = null) return __DIR__ .'/'. $file; } + +// Pri izpolnjevanju ankete preverimo stevilo klikov na minuto - ce jih je prevec, respondenta zavrnemo, drugace se lahko sql zafila in streznik ni vec odziven +function checkClicksPerMinute(){ + + // Stevilo klikov/minuto na anketo (izpolnjevanje), ki jih se pustimo preden zablokiramo dostop + $click_minute_limit = 100; + + // Preverimo ce gre za izpolnjevanje ankete + if($_SERVER["SCRIPT_NAME"] != '/main/survey/index.php') + return true; + + // Preverimo ce gre za prvi prihod na doloceno stran ankete in ne na prvo stran + if(isset($_GET['grupa'])) + return true; + + // Preverimo ce je id ankete ustrezno nastavljen + if(!isset($_GET['anketa']) || $_GET['anketa'] <= 0) + return true; + + + $click_time = time(); + + $sql = sisplet_query("SELECT click_count, click_time FROM srv_clicks WHERE ank_id='".$_GET['anketa']."'"); + if (mysqli_num_rows($sql) > 0) { + + list($click_count, $first_click_time) = mysqli_fetch_array($sql); + + // Ce nismo znotraj minute vse resetiramo in pustimo naprej + if($click_time - $first_click_time > 60){ + $sqlI = sisplet_query("UPDATE srv_clicks SET click_count='1', click_time='".$click_time."' WHERE ank_id='".$_GET['anketa']."'"); + return true; + } + + // Click count je ok - pustimo naprej + if($click_count < $click_minute_limit){ + $sqlI = sisplet_query("UPDATE srv_clicks SET click_count=click_count+1 WHERE ank_id='".$_GET['anketa']."'"); + return true; + } + // Click count je previsok - ZAVRNEMO + else{ + return false; + } + } + else{ + $sqlI = sisplet_query("INSERT INTO srv_clicks (ank_id, click_count, click_time) VALUES ('".$_GET['anketa']."', '1', '".$click_time."')"); + } + + + return true; +} + ?> \ No newline at end of file diff --git a/sql/update2.sql b/sql/update2.sql index dfd01e28e..f15acf1db 100644 --- a/sql/update2.sql +++ b/sql/update2.sql @@ -9294,3 +9294,14 @@ UPDATE misc SET value='20.09.16' WHERE what="version"; INSERT INTO srv_help (help, what) VALUES ('Upload omejitev', 'srv_upload_limit'); UPDATE misc SET value='20.09.18' WHERE what="version"; + +## Tabela dostopov do izpolnjevanja - preverjanje stevila klikov na minuto +CREATE TABLE srv_clicks ( + ank_id INT(11) NOT NULL, + click_count SMALLINT NOT NULL DEFAULT 0, + click_time INT(11) NOT NULL, + PRIMARY KEY (ank_id), + CONSTRAINT fk_srv_clicks_ank_id FOREIGN KEY (ank_id) REFERENCES srv_anketa (id) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +UPDATE misc SET value='20.09.21' WHERE what="version";