Я пытаюсь выяснить, как я могу защитить цифровые загрузки в 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.