Im строит раздел «премиум» на моем сайте и мне нужно предоставить доступ к файлам в удаленном режиме напрямую (на другой сервер), пользователям со специальными привилегиями (учетные записи, хранящиеся в mysql db). Мой сайт закодирован в php/mysql, поэтому php-решение будет отличным.Как защитить загружаемые файлы в удаленном каталоге от не-премиум-пользователей (в php?)
ответ
direct все ссылки для скачивания в файл php, который будет выполнять все проверки учетных данных.
вы можете назвать файл download.php
проходят по параметрам через куки, получить, после, сессии, или в зависимости от того каким образом вы проверяете привилегии.
После проверки учетных данных вы можете отправить соответствующий заголовок.
, если это изображение, заголовок будет header("Content-type: image/jpeg");
я предполагаю, что вы являетесь владельцем этого удаленного сервера.
некоторые полезные ссылки:
Я привык делать это в ASP.NET, где он построен в, но это article кажется, летописного вашей конкретной ситуации.
Как @pxl сказал, что вам нужно проверить для авторизации, а затем вывод правильного типа пантомимы как заголовок HTML (как он сказал: header("Content-type: image/jpeg");
)
Кроме того, как только вы закончите с этим, вы должны выводить реальное содержимое файла и ее размер (в байтах), как, например:
header("Content-Length: ".filesize("FILENAME")*1.001);
/* The *1.001 puts a nice buffer on the filesize, I read about it online.
Browsers will stop downloading exactly at the Content-Length, but if they go
over, it's not a big deal at all. */
readfile("FILENAME");
die();
Просто убедитесь, чтобы сохранить файл в директории, которая не доступна из Интернета.
yup, и вы можете получить этот файл из любого места, к которому имеет доступ веб-сервер. – pxl
Вот что я хотел бы сделать:
Встроенный PHP-SOAP-Sever на удаленном сервере B, который содержит файлы.
Всякий раз, когда пользователь запускает загрузку на вашем основном сервере, подключитесь к SOAP-серверу на B и зарезервируйте билет для пользователя, указав IP-адрес и идентификатор/путь к файлу для загрузки.
Сервер B теперь будет создавать TicketID (который должен быть действителен только в течение ограниченного времени) для этой загрузки и вернуть его к А.
Сервер перенаправляет пользователя на сервер B, подающий TicketID как GET параметр
Сервер B теперь проверяет, был ли билет уже использован, истек или пользователь пришел с неправильного IP-адреса. Если ни один из них не применяется, подайте файл и отметьте используемый билет.
Примечание: На сервере B не держать PHP работает во время службы файл, но использовать X-Sendfile header вместо этого.В противном случае загрузка может прекратиться после выполнения PHP max.
С помощью этого решения позаботьтесь о том, чтобы защитить загрузку файла, введя URL-адрес непосредственно в адресной строке. Например, либо помещайте защищенные файлы в каталог, расположенный за пределами корня веб-сайта, либо обращайтесь к директивам httpd.conf. – xanadont
, и если это все равно на другом сервере, вы можете создать файл или загрузить файл для загрузки по-разному. просто помните, что вы не сможете защищаться от самых решительных загрузчиков. – pxl