From 87e7be1c10681b68f3f554c0c349753550e7f835 Mon Sep 17 00:00:00 2001 From: rirat-0 Date: Wed, 17 Jun 2026 20:30:45 +0200 Subject: [PATCH] Implementation des validators und korrektes einbinden --- php/controller/search-results-controller.php | 7 +++- php/validator/search-validator.php | 40 ++++++++++++++++++++ 2 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 php/validator/search-validator.php diff --git a/php/controller/search-results-controller.php b/php/controller/search-results-controller.php index 4d2a654..a78a23b 100644 --- a/php/controller/search-results-controller.php +++ b/php/controller/search-results-controller.php @@ -5,11 +5,12 @@ if (session_status() === PHP_SESSION_NONE) { require_once '../model/LocalArticleManager.php'; require_once '../model/ArticleManager.php'; require_once '../model/Article.php'; +require_once '../validator/search-validator.php'; if ($_SERVER["REQUEST_METHOD"] === "GET" && isset($_GET["q"])) { $search = trim($_GET["q"]); - if (empty($search)) { + if (!searchQueryValidator($search)) { $_SESSION["search_results"] = []; $_SESSION["search_query"] = ""; $_SESSION["message"] = "missing_parameters"; @@ -51,6 +52,7 @@ if ($_SERVER["REQUEST_METHOD"] === "GET" && isset($_GET["q"])) { "category" => $obj->category, "tags" => $obj->tags, "creationDate" => $obj->creationDate + //"likes" => $obj->likes ]; } @@ -65,6 +67,9 @@ if ($_SERVER["REQUEST_METHOD"] === "GET" && isset($_GET["q"])) { $sort = $_GET['sort'] ?? 'alphabet'; $limit = isset($_GET['limit']) ? (int)$_GET['limit'] : 10; + if (!searchLimitValidator($limit)) { + $limit = 10; + } $page = isset($_GET['page']) ? (int)$_GET['page'] : 1; header("Location: ../../index.php?pfad=search-results&q=" . urlencode($search) . "&sort=" . urlencode($sort) . "&limit=" . $limit . "&page=" . $page); exit(); diff --git a/php/validator/search-validator.php b/php/validator/search-validator.php new file mode 100644 index 0000000..8c0ea63 --- /dev/null +++ b/php/validator/search-validator.php @@ -0,0 +1,40 @@ + 50) { + return false; + } + + // Erlaubt Buchstaben (inkl. Umlaut/ß), Zahlen, Leerzeichen sowie ?, !, ., -, _ + $searchPattern = '/^[a-zA-Z0-9äöüÄÖÜß\s?!.,\-_]+$/u'; + + return preg_match($searchPattern, $query) === 1; +} + +/** + * Prüft, ob das gewählte Treffer-Limit erlaubt ist. + * + * @param int|string $limit Das zu prüfende Limit + * + * @return bool true wenn das Limit 10, 20, 50 oder 100 ist, sonst false + */ +function searchLimitValidator($limit) +{ + $allowedLimits = [10, 20, 50, 100]; + return in_array((int)$limit, $allowedLimits, true); +} \ No newline at end of file