Back to questions
Senior
10
$filename = $_GET['file']; $content = file_get_contents("/var/www/files/" . $filename); echo $content;
Companies where asked
CSSSR
Answer from AI
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 'Файл не найден';
}