Запретить прямой доступ к PDF-файлу с URL

0

При перенаправлении отсюда мне необходимо предотвратить доступ к файлам PDF (или любым другим), когда кто-то обращается к нему с помощью прямого URL-адреса.

Проблема

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

Однако, если кто-то должен был скопировать эту ссылку и вызвать ее непосредственно из окна браузера, или если бы они разместили ссылку на ваш PDF файл на другом веб-сайте, тогда документ не будет доступен. По умолчанию это так.

Мне удастся скрыть путь к файлу PDF в адресной строке, а сформированный url - http://localhost/myproject/web/viewer.php?id=11&name=sample.pdf, но в консоли можно увидеть полный путь, например http://localhost/myproject/document/11/sample.pdf.

Этот код успешно перенаправляется при повторной загрузке второй страницы, но не тогда, когда я выбираю Open in new tab с консоли.

RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost [NC]
RewriteCond %{REQUEST_URI} !hotlink\.(pdf) [NC]
RewriteRule .*\.(pdf)$ http://google.com/ [NC]

Используется под кодом в .htaccess для предотвращения доступа

RewriteEngine on 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost [NC] 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost.*$ [NC] 
RewriteRule \.(pdf)$ - [F]

Как-то это не работает точно. Он показывает сообщение с запрещенным файлом, только если я CTRL+SHIFT+R иначе используя URL-адрес файла, я все еще могу получить к нему доступ.

Я хочу, чтобы файл pdf отображался как http://localhost/myproject/document/11/sample.pdf непосредственно в строке url

  • 0
    Вы пытались удалить условия на HTTP_REFERER?
  • 0
    @ манурат, о каких условиях ты говоришь?
Показать ещё 6 комментариев
Теги:
pdf
.htaccess

2 ответа

0

Вы можете хранить файлы PDF не в папке webroot и возвращать его содержимое, используя PHP. Например, для URL-адреса пользователя будет выглядеть так:

http://localhost/myproject/document.php? hash = some_hash '

и на файле document.php вы получите хэш документа из функции $_GET parametr use file_get_contents. Также в этом случае вы можете разрешить доступ только один раз

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

0

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню