2010-03-25 2 views
0

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

таких как:

http://mysite.com/download/12.zip

в

http://mysite.com/download/12

есть способ рН p сделать это?

ответ

0

Храните фактические файлы за пределами общедоступной области html, а затем в вашем скрипте PHP просто отправляйте соответствующие заголовки (Content-Type, Content-Length, Content-Disposition) и, наконец, readfile() файл из частного местоположения ,

+0

спасибо, любой пример для чтения файла за пределами public_html!? –

1

Возможно, вы захотите проверить значение $ _SERVER ['HTTP_REFERER'], прежде чем разрешить загрузку, чтобы убедиться, что они не идут с другой страницы.

Как для сокрытия просто сделать это в форме

yoursite.com/download.php?file=filename 

Затем в коде просто ReadFile() содержимое файла в скрытом каталоге - Вы можете запретить физический доступ с .htaccess, если вы действительно, или вы можете запустить имя каталога с помощью. который снова остановит внешний доступ. На самом деле это не обязательно, поскольку не существует способа узнать (или угадать) скрытое имя каталога.

В качестве дополнительной заметки, если вы делаете любой доступ к базе данных и предлагаете большие файлы для загрузки, вы должны закрыть соединение с базой данных перед readfile(), поскольку соединение будет считаться «открытым» на всю продолжительность (даже если оно это десятиминутная загрузка), и в этой ситуации очень легко достичь максимального предела соединения.

0

reko_t находится здесь.

Если ваш корень документа находится в/var/www/mysite, вы можете использовать папку, например say/var/www/files. Это сделает ваши файлы недоступными из Интернета. Затем вам нужно создать скрипт загрузки в php. Использование может использовать realpath для генерации абсолютного пути, если вам нужно использовать относительные пути ($ filename = realpath ("../ files/$ fileid. $ Fileext");).

Взгляните на комментарии пользователей в документации readfile на php.net и найдите функцию readfile_chunked. Я использую эту функцию в своем собственном коде. Очень полезно.

0

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

Посмотрите на php header page, если вы прокрутите вниз, будет довольно много примеров того, как передавать файлы через php. Большинство из них вы можете просто скопировать и использовать.

1

Некоторые методы предотвращения hotlinking, о которых я могу думать (в порядке возрастания сложности).

  1. Проверить $ _SERVER ['HTTP_REFERER']; если он принадлежит вашему сайту или он пуст, разрешите загрузку; если он принадлежит другому сайту, запретите загрузку.

  2. Храните случайный идентификатор в сеансе, когда пользователь посещает список и читает его в сценарии загрузки.

  3. Сформировать временную связь со случайным ID: /download-4Gaw4MWfTH6dB9UgKILSFc2UlnIPRhMv/12.zip

(я не уверен, что вы имели в виду в вашем примере, но удалив расширение файла из URL вряд ли является мерой безопасности.)

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