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

Тема в разделе "PHP", создана пользователем bvb, 21 фев 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. bvb

    bvb

    Регистр.:
    17 май 2009
    Сообщения:
    189
    Симпатии:
    34
    Как сделать так, чтобы при попытке скачивания не с сайта (например путем ввода в браузер готового адреса вида Перейти по ссылке), выводилось 403 Forbidden?
     
  2. nimnul

    nimnul Создатель

    Регистр.:
    24 мар 2008
    Сообщения:
    15
    Симпатии:
    4
    Нужно прописать в .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 нравится это.
  3. vanderv

    vanderv

    Регистр.:
    30 май 2009
    Сообщения:
    270
    Симпатии:
    12
    Это легко обойти. У меня брат программист, так вот он писал парсер(я не помню на каком языке), так вот там была функция referer, в ней можно было вставить любой адрес. Так что обойти будет проще простого.
    Я думаю тут нужно сделать защиту на уровне базы, хоть и нагрузка, зато надёжно. Создаёшь рандом текст. Вставляешь в ссылку. Этот текст записываешь базу, там же ссылку на файл который нужен. И тут по принципу реферера, тока проверяй в базе наличие рандомного текста. Если текст совпал, отдаём реальную ссылку...
    Если человек просто ввёл адрес, то сморим что тут вообще нету никакого теста в реферере... отправляем **х. Объяснил своими словами, если что не понятно пиши сюда, поясню.
     
  4. z00f

    z00f Создатель

    Регистр.:
    17 апр 2009
    Сообщения:
    32
    Симпатии:
    3
    Щас новая мода появилась внедрять даунлоад менеджеры на яваскриптах. Т.е. прямые ссылки недоступны, а скачать можно только с помощью менеджера на сайте.
     
  5. a_n_d_y

    a_n_d_y

    Регистр.:
    26 мар 2006
    Сообщения:
    465
    Симпатии:
    61
    Лучше всего конечно аяксом делать такие вещи, при этом генерить уникальные ключи которые будут проверяться скриптом который выдает файл...
     
  6. nimnul

    nimnul Создатель

    Регистр.:
    24 мар 2008
    Сообщения:
    15
    Симпатии:
    4
    Я в курсе, конечно, что referer можно свой подставить. Но обычный пользователь врядли будет этим занимаццо :)
    Т.е. всё зависит от конкретной постановки задачи. Я предложил самое простое решение.
     
  7. ADyDyka

    ADyDyka Создатель

    Регистр.:
    19 янв 2010
    Сообщения:
    26
    Симпатии:
    5
    Составляем 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 ");
     
  8. tenmed

    tenmed Создатель

    Регистр.:
    29 янв 2010
    Сообщения:
    10
    Симпатии:
    1
    а если файл >20mg ? не каждый хостинг такое разрешит
     
  9. a_n_d_y

    a_n_d_y

    Регистр.:
    26 мар 2006
    Сообщения:
    465
    Симпатии:
    61
    Хм, а какое отношение это к сабжу имеет?
     
Статус темы:
Закрыта.