За последние 24 часа нас посетили 17858 программистов и 1652 робота. Сейчас ищут 1144 программиста ...

Доступ к файлу от имени js скрипта

Тема в разделе "JavaScript и AJAX", создана пользователем Grimm, 16 окт 2015.

  1. Grimm

    Grimm Новичок

    С нами с:
    16 окт 2015
    Сообщения:
    9
    Симпатии:
    0
    Доброго времени!

    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 скриптами - ничего не видится и в просмотрщике.


    Вопрос, как победить просмотр?
    Спасибо за внимание.
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Такое не возможно, только защиту от дурака по hotlink можно сделать, чтобы referer был твоим доменом
     
  3. Grimm

    Grimm Новичок

    С нами с:
    16 окт 2015
    Сообщения:
    9
    Симпатии:
    0
    Поясните не знающему, что такое "referer был твоим доменом". Если добавлять защиту от хотлинкинга по pdf то в iframe он, конечно же, не уходит даже при всех открытых доступах.
     
  4. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Через .htaccess проверь такое условие:
    если pdf файл запросили без referer или referer не с твоего домена, то доступ запрети, напиши, что pdf можно получить только с твоего сайта.

    чтобы pdf файл запрашивал только тот кто перешёл с твоего сайта, referer там предыдущая страница, откуда пришёл пользователь, она должна быть с твоего сайта.
     
  5. Grimm

    Grimm Новичок

    С нами с:
    16 окт 2015
    Сообщения:
    9
    Симпатии:
    0
    Вроде вот так получилось с .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) выводить ошибка доступа?
     
  6. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Выдавать уникальную ссылку, которая работает 1 раз

    Запретить брать файл из кеша, указать принудительно при обновлении запрашивать данные с сервера
     
  7. Grimm

    Grimm Новичок

    С нами с:
    16 окт 2015
    Сообщения:
    9
    Симпатии:
    0
    Кеширование запретил в html-файле выдачи pdf, в начальном php-скрипте и .htaccess. Пока полет нормальный. Ищу другие лазейки, чтобы присечь.
     
  8. Grimm

    Grimm Новичок

    С нами с:
    16 окт 2015
    Сообщения:
    9
    Симпатии:
    0
    Все работает отлично. Но, есть одно "но":

    1. Пользователь авторизуется на сайте.
    2. Входит на страницу просмотрщика pdf.
    3. Смотрит на ссылку в исходном коде.
    4. Скачивает ее в этом же окне, скопировав в адресное поле.
    5. Теперь он может закачивать это файд хоть 1000 раз, даже если разавторизовался.
    6. Прокатывает даже после закрытия браузера. Только завершения сеанса юзверя в винде помогает.
    7. На android-системах только перезагрузка гаджета.

    Это сессия не дохнет?

    Добавлено спустя 44 секунды:
    Кеширование вроде запретил. Уникальность ссылки пока не реализовал.
     
  9. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Это решит задачу, одна ссылка на 1 запрос
     
  10. Grimm

    Grimm Новичок

    С нами с:
    16 окт 2015
    Сообщения:
    9
    Симпатии:
    0
    Понимаю так:

    1. При входе на страницу с просмотрищиком - генерим временный pdf файл.
    2. Ждем пока он загрузится через JS.
    3. Удаляем временный файл.

    Загвоздка № 1 - как узнать что он уже обработан скриптом - думаю реализуемо.
    И загвоздка № 2 - может файл читается на лету, к примеру при пролистывании страниц.

    Добавлено спустя 13 минут 22 секунды:
    Загвоздка № 2 решилась - он грузит в оперативку.
    По поводу первой - файл-то грузится через JS в оперативку юзера, как понять что уже пора удалять?
     
  11. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Сделай временную ссылку, по ней и выдавай файл
     
  12. Grimm

    Grimm Новичок

    С нами с:
    16 окт 2015
    Сообщения:
    9
    Симпатии:
    0
    Спасибо огромное за все!
    А время жизни ссылки как регулировать?
     
  13. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    В сессию записывай что ссылка уже использована и можно время там же хранить, если кто-то запросит данные и у него нет в сессии ссылки или она уже использована, то данные не выдавай.
     
  14. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Можно отдавать пхп-скриптом, но это плохо и грозит зависанием всех пхп-потоков