Я пишу веб-приложение в php, где пользователи могут загружать свои собственные файлы или изображения, но как я могу защитить эти файлы от доступа другими пользователями, кроме владельца. подумайте о Dropbox, каков механизм защиты этих файлов, я попытался выполнить поиск, но ничего не получил об этом. любые указатели или любая ссылка на учебники были бы очень полезными. заранее спасибо.
Если вы храните изображения и файлы в виде двоичных блоков в своей базе данных, то это просто проверка прав доступа к зарегистрированному пользователю перед их извлечением и отображением из базы данных.
Если вы храните их в виде обычных файлов, то вам нужно сохранить их над корнем документа вашего сайта, где они не доступны для публики в Интернете. Затем, чтобы получить изображение, после проверки правильной собственности из вашей базы данных (мы не знаем вашу архитектуру, поэтому замените, однако, вы сохранили то, что принадлежит кому), PHP может получить файл и отправить его в браузер с правильными заголовками ,
Например, чтобы отобразить изображение:
// Check permissions... // If permissions OK: $img = file_get_contents("/path/to/image.jpg"); // Send jpeg headers header("Content-type: image/jpeg"); // Dump out the image data. echo $img; exit();
Например, вы можете сохранить таблицу базы данных имен файлов, сопоставляемую с идентификаторами пользователей, чтобы отслеживать, кому принадлежит.
Типичный способ сделать это – это что-то вроде …
Затем пользователи используют идентификатор для запроса файла с сервера.
Для этого у вас будет скрипт, который запрашивает базу данных для файла на основе идентификатора, и затем проверяет, имеет ли пользователь доступ к его чтению. Если у пользователя есть доступ, он будет читать файл и выводить его в браузер пользователя.
Например, чтобы прочитать jpeg-образ в PHP:
<?php header('Content-type: image/jpg'); readfile('/path/to/image.jpg');
использовать уникальные и специальные имена файлов и представлять их только пользователю, который не работает. вы также можете установить сеанс в PHP и проверить, согласуется ли сеанс с файлом. и использовать httacces tio для перенаправления на PHP.
<? sessuion_start(); file_exists($_SESSION['specialkey']_$_GET['realfilename']){ include(/* include the file */); // or readfile //or header location, but then the rteal URL will become visible }else{ die('acces denied'); }
специальный ключ задается на странице PHP, создавая страницу отображения, и является уникальным для файла evey и получен из базы данных. это самый быстрый способ, с которым я мог бы общаться.
вы можете захотеть сохранить файлы в каталоге, доступном только из PHP
вместо включения вы можете использовать метод Яни Хартикайнен