Dodana omejitev klikov/minuto pri izpolnjevanju dolocene ankete (zaenkrat 100)

This commit is contained in:
pero1203 2020-09-21 14:01:46 +02:00
parent 65c97fa7af
commit dfc8b403b3
2 changed files with 72 additions and 8 deletions

View File

@ -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 '<h1>Service Unavailable.</h1>';
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;
}
?>

View File

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