0
- 22.04.2015 - 20:09
|
Добрый день. Сделал вот такой тестовыйй пример: <?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); ?> | |
1
- 23.04.2015 - 22:58
|
В первую очередь, правильной установкой прав. Во вторую, введением авторизации в скрипте, подключаемом через требование ко всем остальным. Также можно контролировать вызовы своих подскриптов проверкой на дефайн, задаваемый в основном скрипте. Или проверкой специфической переменной в сессиях. Ну и, наконец, не позволять себе писать скрипты таким способом, требующим передачи важных параметров через get/post. | |
2
- 23.04.2015 - 23:01
| Задавайте в конфиге полный путь к рут-папке данных, с которыми работаете, и все операции проводите, включая этот путь. | |
3
- 25.04.2015 - 15:59
|
делаю подстраховку примерно вот так: unlink("$userDir/$_GET[filename]".'.txt'); т.е. удалить можно только txt | |
4
- 10.05.2015 - 00:34
| С помощью pathinfo() получить имя файла без пути и прицепить его к разрешенному пути. | |
5
- 11.05.2015 - 08:14
| 2-Фанат NASCAR > от души желаю пообщаться с миграцией такого сайта с константами абсолютных путей на другой хостинг) realpath для слабаков, да) | |
6
- 11.05.2015 - 11:57
|
Народ - Автор сам же и придумал ЗАЩИТУ! $myVar=$userDir.str_replace("..","",$_GET["file"]); Только вместо ".." надо поставить "/", тогда любой путь в $_GET будет восприниматься как имя файла. Получается так: $myVar=$userDir.str_replace("/","",$_GET["file"]); Вот и ВСЕ! :) | |
7
- 12.05.2015 - 11:29
| 5-droidman >что мешает изменить этот путь в одном месте в конфиге? | |
| Интернет-форум Краснодарского края и Краснодара |