Имя: Пароль:
IT
Веб-мастеринг
Безопасность функции unlink в PHP.
0 megabax
 
21.04.15
22:19
Добрый день.
Сделал вот такой тестовыйй пример:
<?php
    $userDir="1/";
    $myVar=$userDir.$_GET["file"];
    unlink($myVar);
?>
По идее он должен удалить из каталога 1 указанный файл. Но пользователь может ввести какую-нибудь пакость вроде вот этого:
http://localhost/3.php?file=../1.php
тем самым удалив файл из другого каталога.
Как от этого можно защититься?
Пробовал вот так:
<?php
    $userDir="1/";
    $myVar=$userDir.str_replace("..","",$_GET["file"]);
    unlink($myVar);
?>
Но тогда юзер не сможет удалить файл из своего каталога например такой: 111..txt
Есть еще способы защиты?
1 megabax
 
22.04.15
19:58
up
2 Asmody
 
22.04.15
20:24
basename()
3 Asmody
 
22.04.15
20:28
И результат вызова unlink надо как минимум проверять. А лучше заэкранировать или завернуть в try.
4 Torquader
 
23.04.15
00:34
Нехрен пользователю вообще файлы видеть - пусть данные о его файлах хранятся в базе, а реальные файлы живут в одной директории с идентификатором записи в базе вместо имени.
Тогда пользователь можно что угодно делать со своими файлами, а удалятся будет только то, что нужно.