Я создал простое управление файлами для пары пользователей.
Структура: у каждого пользователя есть карта в директории uploads
как ниже:
uploads/john/-->files inside
uploads/bill/-->files inside
Для удаления файлов я использую эту форму «
<form class="sfmform" method="post" action="">
<input type="hidden" name="deletefile" value="<?php echo $dir.'/'.$file">
<input type="submit" class="sfmdelete" name="delete" value="Delete">
</form>
Вар $dir.'/'.$file
показывает мне точное местоположение файла, например:
uploads/john/cat.jpg
Допустим, я Джон и я знаю, что имя другого законопроект.
И я думаю, законопроект также имеет файл в своем файле dog.jpg
Я открываю инспектор браузера для удаления файла в своей папке и изменяю значение скрытой формы ввода uploads/john/cat.jpg
в uploads/bill/dog.jpg
и нажмите на удалить, я действительно удалил изображение собаки из счета его папку.
Как я могу защитить этот вид манипуляций через инспектор браузера?
Вот что я сделал, чтобы защитить манипуляции с помощью инспектора браузера:
Названия папок как john
а также bill
генерируются этой переменной: UserID
Все папки находятся внутри uploads
каталог. Так это выглядит так:uploads/john/...
а такжеuploads/bill/...
Значение скрытого текстового поля создается с помощью: $dir.'/'.$file
и всегда выглядит uploads/john/file.jpg
Теперь я сравниваю $UserID
со значением скрытого поля после первого /
как это:
$pieces = explode("/", $_POST['deletefile']);
$hiddenvalue = $pieces[1];
if( $UserID != $hiddenvalue ) { // if these values not the same
echo "Forbidden!";
exit;
}
Я проверил это, и, кажется, работает нормально …
Хорошо! Это не самое профессиональное решение, но я хотел сделать этот скрипт без базы данных
Других решений пока нет …