|
Безопасность функции unlink в PHP.
| ☑ |
0
megabax
21.04.15
✎
22:19
|
Добрый день.
Сделал вот такой тестовыйй пример:
<?php
$userDir="1/";
$myVar=$userDir.$_GET["file"];
unlink($myVar);
?>
По идее он должен удалить из каталога 1 указанный файл. Но пользователь может ввести какую-нибудь пакость вроде вот этого:
тем самым удалив файл из другого каталога.
Как от этого можно защититься?
Пробовал вот так:
<?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
|
Нехрен пользователю вообще файлы видеть - пусть данные о его файлах хранятся в базе, а реальные файлы живут в одной директории с идентификатором записи в базе вместо имени.
Тогда пользователь можно что угодно делать со своими файлами, а удалятся будет только то, что нужно.
|
|