Защита от прямых ссылок на файл

Написал я на днях плагин, который при загрузке pdf конвертирует в swf формат. Пробовал на JQuery отображать pdf, но там с безопасностью совсем плохо.
После загрузки файлы сваливаются в wp-content/pdf/. Пока с помощью WordPressPDF я транслирую эти файлы пользователю, при дальнейшей разработке будет свой просмотрщик.
Вопрос. Как защитить от скачивания этот swf файл если обратиться к нему на прямую? Т.е. если обращается скрипт, то содержимое должно быть отображено, если же по ссылке www.site.ru/wp-content/pdf/myfile.pdf то возвращать 403 или 404 код.

Т.е. если обращается скрипт, то содержимое должно быть отображено, если же по ссылке www.site.ru/wp-content/pdf/myfile.pdf то возвращать 403 или 404 код.

Видел на ruseller.com интересное решение защиты от спама

Данный код в .htaccess предотвращает непосредственный доступ спам ботов к файлу  wp-comments-post.php, который формирует комментарии на блоге.
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_METHOD} POST
    RewriteCond %{REQUEST_URI} .wp-comments-post\.php*
    RewriteCond %{HTTP_REFERER} !.*yourdomainname.* [OR]
    RewriteCond %{HTTP_USER_AGENT} ^$
    RewriteRule (.*) ^http://%{REMOTE_ADDR}/$ [R=301,L]
    </IfModule>

Может и для Вашей задачи подойдет?

Хотя если ввести название этой темы в поисковик
есть очень много примеров решения вопроса)

Хотя если ввести название этой темы в поисковик
есть очень много примеров решения вопроса)

В том то и дело, что это всего лишь примеры для экономии вашего трафика. Описанный вами метод к сожалению не подходит. При отображении страницы, js начинает работать посл загрузки контента, т.е. swf файл грузится последним. [10:24:14.928] GET http://site.ru/wp-content/pdf/file.swf [HTTP/1.1 200 OK 10мс]

Проблема в том, что сервер не различает кто ему отправил запрос, скрипт или просто в адресной строке ввели адрес.

Как вариант можно использовать права доступа на файл, но проблема в том, что js начинает работу только после того как отработает PHP.
Есть идея. В начале запроса к файлу отправить ajax запрос и поменять права на конкретный файл с 0000 на 0644, затем, после завершения работы скрипта снова запрос и изменение прав на 0000. Не совсем оно, но всё же.

Есть ещё вариант – использовать file_get_contents() в FlexPaper для отображения контента, но придётся изменять header, что WP сделать не даст.

И такой пример не находили / не работает?

RewriteEngine on
RewriteBase / 
 
# если надо разрешить скачку при пустом рефере раскомментируйте это
# RewriteCond %{HTTP_REFERER} !^$
 
# Дальше список идет набор разрешенных доменов
RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?domen1.ru [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?domen2.ru [NC]
 
# Форматы файлов, для которых устанавливается защита (например, mp3)
RewriteRule .(mp3)$ http://domen1.com

Т.е. обращение к файлам с определенным расширением обращения разрешены только для вашего домена (доменов).
Остальные обращения переадресуются куда скажете.

Проблема в том, что сервер не различает кто ему отправил запрос, скрипт или просто в адресной строке ввели адрес.

Вообще-то, чтобы различал, и был придуман HTTP_REFERER. Правда, он не всегда передается и легко подделывается.

Существует метод временных ключей или временных имён. При открытии страницы со ссылкой на файл под скачивание (или просмотр – один черт) генерируется уникальный ключ и сохраняется в базе или в файле. Клиент запрашивает файл с ключом в параметре или по временному имени. Сервер проверяет валидность ключа/имени и отдает файл или не отдает.

И такой пример не находили / не работает?
Т.е. обращение к файлам с определенным расширением обращения разрешены только для вашего домена (доменов).
Остальные обращения переадресуются куда скажете.

Все эти примеры это защита от хотлинков, а не от скачивания.

Существует метод временных ключей или временных имён. При открытии страницы со ссылкой на файл под скачивание (или просмотр - один черт) генерируется уникальный ключ и сохраняется в базе или в файле. Клиент запрашивает файл с ключом в параметре или по временному имени. Сервер проверяет валидность ключа/имени и отдает файл или не отдает.

Попробую антилич прикрутить.

Anonymous
Отправить
Ответ на: