Защита файлов от скачивания

Статус
В этой теме нельзя размещать новые ответы.

bvb

Мастер
Регистрация
17 Май 2009
Сообщения
189
Реакции
31
Как сделать так, чтобы при попытке скачивания не с сайта (например путем ввода в браузер готового адреса вида Для просмотра ссылки Войди или Зарегистрируйся), выводилось 403 Forbidden?
 
Нужно прописать в .htaccess такую конструкцию:
Код:
SetEnvIf Referer "^http://domain\.com/" ownRef
<Files "download.php">
    Order Deny,Allow
    Deny from all
    Allow from env=ownRef
</Files>
Т.е. разрешать доступ к download.php только тем, у кого в Referer - наш домен.
Конструкция работает в Apache 2.2, в старых не проверял.
Также можно написать аналог с использованием mod_rewrite.
 
  • Нравится
Реакции: bvb
Нужно прописать в .htaccess такую конструкцию:
Код:
SetEnvIf Referer "^http://domain\.com/" ownRef
<Files "download.php">
    Order Deny,Allow
    Deny from all
    Allow from env=ownRef
</Files>
Т.е. разрешать доступ к download.php только тем, у кого в Referer - наш домен.
Конструкция работает в Apache 2.2, в старых не проверял.
Также можно написать аналог с использованием mod_rewrite.
Это легко обойти. У меня брат программист, так вот он писал парсер(я не помню на каком языке), так вот там была функция referer, в ней можно было вставить любой адрес. Так что обойти будет проще простого.
Я думаю тут нужно сделать защиту на уровне базы, хоть и нагрузка, зато надёжно. Создаёшь рандом текст. Вставляешь в ссылку. Этот текст записываешь базу, там же ссылку на файл который нужен. И тут по принципу реферера, тока проверяй в базе наличие рандомного текста. Если текст совпал, отдаём реальную ссылку...
Если человек просто ввёл адрес, то сморим что тут вообще нету никакого теста в реферере... отправляем **х. Объяснил своими словами, если что не понятно пиши сюда, поясню.
 
Щас новая мода появилась внедрять даунлоад менеджеры на яваскриптах. Т.е. прямые ссылки недоступны, а скачать можно только с помощью менеджера на сайте.
 
Лучше всего конечно аяксом делать такие вещи, при этом генерить уникальные ключи которые будут проверяться скриптом который выдает файл...
 
Это легко обойти. У меня брат программист, так вот он писал парсер(я не помню на каком языке), так вот там была функция referer, в ней можно было вставить любой адрес. Так что обойти будет проще простого.
Я в курсе, конечно, что referer можно свой подставить. Но обычный пользователь врядли будет этим занимаццо :)
Т.е. всё зависит от конкретной постановки задачи. Я предложил самое простое решение.
 
Составляем htacess если файл имеет расширение например doc, txt и т.д, перечисляем типы загружаемых файлов. То редиректим на php скрипт, что то типа такого получится:
PHP:
Options -Indexes
RewriteEngine on
RewriteRule !\.(pdf|doc|xls|txt|gif|jpg|png|zip|tar\.gz)$ downloader.php

Этот downloader может проверять человека, допустим по наличию кукисов (можно например вообще только авторизованным пользователям разрешить, или тем кто вообще был на сайте). И в случае успешной идентификации, выдаем клиенту файл,
так на вскидку можно что то типа такого (наверное есть более изящное решение:(
PHP:
$binaryCode = file_get_contents($doc_name);
header("Cache-Control: public, must-revalidate, max-age=0");
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header("Content-Disposition: attachment;filename=$doc_name");
header("Content-Transfer-Encoding: binary ");
 
а если файл >20mg ? не каждый хостинг такое разрешит
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху