Sobes.tech
Назад к вопросам
Senior
11

$filename = $_GET['file']; $content = file_get_contents("/var/www/files/" . $filename); echo $content;

Компании, где спрашивали
CSSSR

Ответ от нейросети

sobes.tech AI

В данном коде есть уязвимость типа Path Traversal (обход директорий). Параметр $filename берется напрямую из GET-запроса и подставляется в путь к файлу без проверки, что позволяет злоумышленнику получить доступ к любым файлам на сервере.

Пример атаки: если передать file=../../etc/passwd, то будет прочитан системный файл.

Чтобы исправить, нужно:

  • Проверять и фильтровать имя файла, разрешая только допустимые значения.
  • Использовать функции для нормализации пути и проверки, что файл находится в нужной директории.

Пример безопасного варианта на PHP:

$filename = basename($_GET['file']); // убирает пути
$filepath = '/var/www/files/' . $filename;
if (file_exists($filepath)) {
    echo file_get_contents($filepath);
} else {
    echo 'Файл не найден';
}