Selaa lähdekoodia

enhanced security for the redirected page

root 9 kuukautta sitten
vanhempi
sitoutus
54d1d1b92f
1 muutettua tiedostoa jossa 27 lisäystä ja 0 poistoa
  1. 27 0
      html/login.php

+ 27 - 0
html/login.php

@@ -18,6 +18,33 @@ function getSafeRedirectUrl(string $default = '/'): string {
         return $default;
     }
 
+    // Проверяем:
+    // 1. Начинается с /, не содержит //, ~, %00
+    // 2. Разрешённые символы: a-z, 0-9, -, _, /, ?, =, &, .
+    // 3. Допустимые форматы:
+    //    - /path/          (слэш на конце)
+    //    - /path           (без слэша)
+    //    - /file.html      (только .html)
+    //    - /script.php     (только .php)
+    //    - Любой вариант с параметрами (?id=1)
+    if (!preg_match(
+        '/^\/'                      // Начинается с /
+        . '(?!\/)'                  // Не //
+        . '[a-z0-9\-_\/?=&.]*'      // Разрешённые символы
+        . '(?:\/'                   // Варианты окончаний:
+          . '|\.(html|php)(?:\?[a-z0-9\-_=&]*)?'  // .html/.php (+ параметры)
+          . '|(?:\?[a-z0-9\-_=&]*)?' // Или параметры без расширения
+        . ')$/i', 
+        $decodedUrl
+    )) {
+        return $default;
+    }
+
+    // Дополнительная защита: явно блокируем /config/, /vendor/ и т.д.
+    if (preg_match('/(^|\/)(cfg|inc|log|sessions|tmp)(\/|$)/i', $decodedUrl)) {
+        return $default;
+    }
+
     return $url;
 }