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";