защитить файлы пользователей, к которым имеет доступ только владелец? - PullRequest
2 голосов
/ 10 июля 2011

Я пишу веб-приложение на php, где пользователи могут загружать свои собственные файлы или изображения, но как я могу защитить эти файлы от доступа других, кроме владельца. Подумайте о Dropbox, каков механизм защиты этих файлов, я пытался искать, но ничего не получил по этому поводу. любые указатели или ссылки на учебники будут очень полезны. заранее спасибо.

Ответы [ 3 ]

7 голосов
/ 10 июля 2011

Если вы храните изображения и файлы в виде двоичных двоичных объектов в вашей базе данных, тогда нужно просто проверить разрешения для вошедшего в систему пользователя, прежде чем извлекать и отображать их из базы данных.

Если вы храните их как обычные файлы, вам нужно хранить их над корневым каталогом документов на вашем веб-сайте, чтобы они не были публично доступны в Интернете. Затем для извлечения изображения, после проверки правильности владения из вашей базы данных (мы не знаем вашу архитектуру, поэтому замените тем, что вы сохранили, кому), 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();

Вы можете, например, вести таблицу базы данных с именами файлов, совпадающими с идентификаторами пользователей, чтобы отслеживать, кому что принадлежит.

3 голосов
/ 10 июля 2011

Типичный способ сделать это выглядит примерно так ...

  • Файл загружен
  • Файл перемещен в каталог , а не доступ из интернета
  • Для файла генерируется идентификатор и сохраняется в базе данных

Затем пользователи используют идентификатор для запроса файла с сервера.

Для этого у вас будет скрипт, который запрашивает у базы данных файл на основе идентификатора, а затем проверяет, есть ли у пользователя доступ к его чтению.Если у пользователя есть доступ, он читает файл и выводит его в браузер пользователя.

Например, чтобы прочитать изображение в формате jpeg в PHP:

<?php
header('Content-type: image/jpg');
readfile('/path/to/image.jpg');
0 голосов
/ 10 июля 2011

используйте уникальные и специальные имена файлов и представляйте их только удаленному пользователю.Вы также можете установить сеанс в PHP и проверить, корректно ли сеанс включить файл.и используйте httacces tio redirect для 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, создающей страницу отображения, и является уникальным для каждого файла и получен из БД.это самый быстрый способ, которым я мог бы воспользоваться.

Вы можете также хотеть хранить файлы в директории, доступной только из PHP

редактировать вместо включения вы можете использовать метод Яни Хартикайнен

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...