2013-11-30 2 views
0

Это вопрос оптимальной практики и реализации.Безопасное хранение и обслуживание пользовательских файлов с помощью PHP/MySQL

Вот сценарий/требования:

- Бэкэнд PHP, БД MySQL - Вход для пользователей установить сеанс, весь сайт на HTTPS - Пользователи могут загружать медицинские файлы (PNG/mp4/PDF. ..) на их счет. - Пользователь должен иметь возможность просматривать (встроить IMG или VIDEO на сайте) или загрузить его файлы. - Файлы не могут быть просмотрены пользователями, не являющимися владельцами, если они не разрешены (флаг установлен на БД). - Совместное использование файлов не может работать, если пользователь не является владельцем и имеет активный сеанс.

У меня загружена загрузка файлов через AJAX. Сейчас я генерирую случайный ключ и использую его как имя файла на сервере, чтобы избежать угадывания имени файла. Но следующая проблема заключается в том, что если у кого-то есть URL-адрес, они могут просматривать файлы.

Какие меры и практические шаги необходимо предпринять, чтобы снять это? Поскольку это медицинское, безопасность имеет первостепенное значение. Есть ли что-то, что я упустил или пропал без вести?

Благодаря

ответ

0

Я хотел бы предложить следующее:

  1. использовать отдельную базу данных для каждого пользователя в MYSQL.
  2. Создайте отдельный db, используя php для новой регистрации. (create database <db_name>;)
  3. Ведение общей таблицы, содержащей информацию для входа пользователя (например, User_id, email, password, db_name alloted), используйте эту таблицу для проверки учетных данных входа в систему и активации сеанса & db для этого пользователя.
  4. Зашифруйте пароль перед сохранением в db во время регистрации в вышеупомянутой таблице с помощью метода MYSQL password() для дополнительной безопасности.
  5. Проверка/подтверждение session на начало каждого & каждой страницы php, чтобы избежать доступа к случайным URL.
  6. session/coookie срок истечения срока годности PHP.INI.
  7. Поддержание произвольного имени файла не менее 32 символов или лучше 64 символа, чтобы избежать угадывания.
  8. НЕ храните загруженные файлы в каталоге сервера (т.htdocs или www), вместо этого сохранить в файловой системе под отдельный каталог для каждого пользователя & использовать php для доступа к концу файла echo содержимое в браузер. ПРИМЕЧАНИЕ. Используйте случайное имя для каталога, выделенного для каждого отдельного пользователя.
  9. Избегайте хранения файлов в БД MySQL для Avid экономии & проблемы с производительностью ...

Пожалуйста, дайте мне знать, если какой-либо пункт не понятно ..... спасибо.

0

В каталоге медиафайлов, добавить файл Htaccess следующим:

order deny,allow 
allow from [IP_ADDRESS] 
deny from all 

Где IP_ADDRESS это IP-адрес вашего сервера PHP. Это запретит пользователям перемещаться по каталогу, в котором находятся файлы.

Затем используйте PHP, чтобы обслуживать файл (изменить заголовки). Например:

header('Content-type: '.$mimeType); 
header("Content-Disposition: inline; filename=".$filename);//lets the browser open the pdf 
header('Last-Modified: '.gmdate('D, d M Y H:i:s') . ' GMT'); 
header('Cache-Control: no-store, no-cache, must-revalidate'); 
header('Cache-Control: pre-check=0, post-check=0, max-age=0'); 
header('Pragma: anytextexeptno-cache', true); 
header('Cache-control: private'); 
header('Expires: 0'); 
readfile($file); 

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

Надеюсь, это поможет.

Смежные вопросы