$filename = $_GET['file'];

В данном коде есть уязвимость типа Path Traversal (обход директорий).

Короткий ответ

Что ответить на собеседовании

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

Подробный разбор

Ответ с пояснениями

Условие

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

Ответ

В данном коде есть уязвимость типа 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 'Файл не найден';
}

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее