PHP – Защита цифровых загрузок

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

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

Может ли кто-нибудь указать мне в правильном направлении?

Лучший способ – делегировать управление загрузкой после проверки в мод для apache

 x_sendfile 

https://tn123.org/mod_xsendfile/

Применение:

 <?php ... if ($user->isLoggedIn()) { header("X-Sendfile: $path_to_somefile"); header("Content-Type: application/octet-stream"); header("Content-Disposition: attachment; filename=\"$somefile\""); exit; } ?> <h1>Permission denied</h1> <p>Login first!</p> 

В основном, когда вы отправляете заголовок X-Sendfile, мода перехватывает файл и управляет загрузкой для вас (файл может быть расположен, когда вы захотите за пределами виртуального хоста).

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

Несколько примеров: вы можете размещать файлы вне корневого каталога веб-сервера или в каталоге, который защищен файлом .htaccess с правилом «отклонить от всех»; то вы доставляете файлы с помощью специальной функции PHP, которая устанавливает правильные заголовки (mime-type, filesize и т. д.) и возвращает файл.

Вы можете создавать ссылки с уникальным идентификатором на основе хешей MD5 или SHA1 – правило mod_rewrite указывает идентификатор на ваш PHP-файл, вы просматриваете идентификатор в базе данных и выполняете свои проверки времени, например

 example.com/downloads/73637/a8d157edafc60776d80b6141c877bc6b 

переписывается

 example.com/dl.php?id=a8d157edafc60776d80b6141c877bc6b&file=73637 

Вот пример того, что вы делаете с nginx и PHP: http://wiki.nginx.org/HttpSecureLinkModule

« Безопасные ссылки для загрузки », скрипт PHP может использоваться для скрытия загружаемого URL-файла или переименования файла загрузки, у него есть опция для хранения ниже корневого веб-сайта и для файлов, хранящихся выше webroot с абсолютными URL-адресами http.