Доброго времени! 1. Имеем на сервере Apach страницу php на которой отображаем документ pdf при помощи просмотрщика ViewerJS (viewerjs.org). Выводится во фрейме: ---- <iframe src = "ViewerJS/#../temp/demo.pdf" allowfullscreen webkitallowfullscreen></iframe> ---- 2. Задача: сделать файл "demo.pdf" доступным только посредством просмотрщика. Пробовал играться с правами пользователей - без толку. Внес в директорию "temp" файл ".htaccess" вида: ---- order deny,allow deny from all ---- Никто читать не может, php скрипты запросто! Однако, так как запускается фрейм, который потом выводит html-страницу работающую с js скриптами - ничего не видится и в просмотрщике. Вопрос, как победить просмотр? Спасибо за внимание.
Поясните не знающему, что такое "referer был твоим доменом". Если добавлять защиту от хотлинкинга по pdf то в iframe он, конечно же, не уходит даже при всех открытых доступах.
Через .htaccess проверь такое условие: если pdf файл запросили без referer или referer не с твоего домена, то доступ запрети, напиши, что pdf можно получить только с твоего сайта. чтобы pdf файл запрашивал только тот кто перешёл с твоего сайта, referer там предыдущая страница, откуда пришёл пользователь, она должна быть с твоего сайта.
Вроде вот так получилось с .htaccess в директории с файлами *.pdf --- RewriteEngine On RewriteCond %{HTTP_REFERER} !^http://(www.)?mysite\.ru(/)? RewriteCond %{HTTP_REFERER} !^http://(.*)\.mysite\.ru(/)? RewriteRule .*\.(pdf)$ – [F] --- Где mysite.ru мой домен. Буду по-разному тестировать. Спасибо большое! Добавлено спустя 5 минут 34 секунды: Вот какая беда. Если пользователь находится на сайте mysite.ru и потом переходит на ссылку к файлу *.pdf, которую прописал ручками - доступ же есть (реферер-то свой). Как сию беду победить? Добавлено спустя 3 минуты 53 секунды: Или он в кеше у браузера остается, потому что при перезагрузке страницы (F5) выводить ошибка доступа?
Выдавать уникальную ссылку, которая работает 1 раз Запретить брать файл из кеша, указать принудительно при обновлении запрашивать данные с сервера
Кеширование запретил в html-файле выдачи pdf, в начальном php-скрипте и .htaccess. Пока полет нормальный. Ищу другие лазейки, чтобы присечь.
Все работает отлично. Но, есть одно "но": 1. Пользователь авторизуется на сайте. 2. Входит на страницу просмотрщика pdf. 3. Смотрит на ссылку в исходном коде. 4. Скачивает ее в этом же окне, скопировав в адресное поле. 5. Теперь он может закачивать это файд хоть 1000 раз, даже если разавторизовался. 6. Прокатывает даже после закрытия браузера. Только завершения сеанса юзверя в винде помогает. 7. На android-системах только перезагрузка гаджета. Это сессия не дохнет? Добавлено спустя 44 секунды: Кеширование вроде запретил. Уникальность ссылки пока не реализовал.
Понимаю так: 1. При входе на страницу с просмотрищиком - генерим временный pdf файл. 2. Ждем пока он загрузится через JS. 3. Удаляем временный файл. Загвоздка № 1 - как узнать что он уже обработан скриптом - думаю реализуемо. И загвоздка № 2 - может файл читается на лету, к примеру при пролистывании страниц. Добавлено спустя 13 минут 22 секунды: Загвоздка № 2 решилась - он грузит в оперативку. По поводу первой - файл-то грузится через JS в оперативку юзера, как понять что уже пора удалять?
В сессию записывай что ссылка уже использована и можно время там же хранить, если кто-то запросит данные и у него нет в сессии ссылки или она уже использована, то данные не выдавай.