Merge branch 'levi' into 'master'

feltöltési limit

Closes #3

See merge request epagris/photowall!2
This commit is contained in:
Wiesner András 2021-01-19 07:35:45 +01:00
commit 22a9491201
2 changed files with 49 additions and 5 deletions

View File

@ -4,6 +4,9 @@ ini_set("display_errors", "On");
include_once "globals.php";
// feltöltési limit 10 percen belül
define("UPLOAD_LIMIT_10MIN", 10);
// könyvtárak
define("ARTWORKS_DIR", "ARTWORKS");
define("INCOMING_DIR", ARTWORKS_DIR . DIRECTORY_SEPARATOR . "incoming");
@ -15,6 +18,22 @@ function only_alpha_numeric($input){
return preg_replace("/[^a-zA-Z0-9_]+/", "", $input);
}
// felhasználó IP címének meghatározása... nem is olyan triviális
// https://stackoverflow.com/a/2031935
function get_client_ip(){
foreach (array('HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED') as $key){
if (array_key_exists($key, $_SERVER) === true){
foreach (explode(',', $_SERVER[$key]) as $ip){
$ip = trim($ip); // just to be safe
if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_IPV6 | FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) !== false){
return $ip;
}
}
}
}
return $_SERVER['REMOTE_ADDR'];
}
// csatlakozás az adatbázishoz
function open_sql_connection()
{
@ -30,17 +49,31 @@ function incoming_from_uid($uid)
return INCOMING_DIR . DIRECTORY_SEPARATOR . $uid;
}
// feltöltött fájl feldolgozása
// RET:
// -2: MIME-hiba
// -3: mérethiba
// pozitív: egyedi azonosító, a feltöltés sikerült
/*
* feltöltött fájl feldolgozása
* RET:
* -1: ismeretlen hiba
* -2: MIME-hiba
* -3: mérethiba
* -3: elérte a feltöltési limitet
* string: egyedi azonosító, a feltöltés sikerült
*/
define("MIME_ERROR", -2);
define("SIZE_ERROR", -3);
define("LIMIT_ERROR", -4);
function process_uploaded_file($file_info)
{
// feltöltési limit ellenőrzése
global $dbconn;
$ip = mysqli_real_escape_string($dbconn, get_client_ip()); // escape, biztos ami biztos
$query = "SELECT COUNT(No) FROM server_access WHERE Timestamp > TIMESTAMPADD(MINUTE, -10, CURRENT_TIMESTAMP) AND IP = '$ip';";
$ret = (int)mysqli_query($dbconn, $query)->fetch_assoc()["COUNT(No)"];
if ($ret === false || $ret >= UPLOAD_LIMIT_10MIN){
return LIMIT_ERROR;
}
$ACCEPTED_MIME_TYPES = ["image/png", "image/jpeg"]; // elfogadott MIME-típusok
$MINIMUM_SIZE_BY_DIM = 2000; // minimális oldalméret
@ -63,6 +96,14 @@ function process_uploaded_file($file_info)
$incoming_filename = incoming_from_uid($tmp_uid);
$ret = move_uploaded_file($tmp_filename, $incoming_filename);
// felhasználó IP címének eltárolása a feltöltési limit betartatásához
$query = "INSERT INTO server_access (IP, Image_FileName, Timestamp) VALUES('$ip', '$tmp_uid', CURRENT_TIMESTAMP);";
$res = mysqli_query($dbconn, $query);
// ha valamiért sikertelen, hibával térünk vissza
if ($res !== true) {
return -1;
}
return $tmp_uid;
}

View File

@ -126,6 +126,9 @@ function process_upload_response(resp) {
case -3:
alert("Mérethiba: a kép hosszabb oldalának legalább 2000 pixel szélesnek kell lennie!");
break;
case -4:
alert("Elérted a feltöltési limitet.\nKérlek próbáld újra később!");
break;
default:
alert("Valami nem stimmel!\nHa ismételten nem sikerül, kérlek jelezd a hibát!");
break;