Как ограничить доступ к файлу или файлам с помощью .htaccess?

Я хочу ограничить доступ к файлу или файлам с помощью файла .htaccess. По сути, никто не должен иметь возможность загружать файл (ы), используя прямую ссылку на файл. Однако файл должен быть доступен с моего веб-сайта.

Например, скажем, у меня есть файл под названием Presentation.ppt. Я хочу, чтобы посетитель имел доступ к нему через мой веб-сайт, но если они попытаются загрузить его или получить к нему доступ по прямой ссылке, сервер должен отклонить запрос.

Можно ли это сделать с помощью .htaccess?

Заранее спасибо,


person ThN    schedule 28.09.2012    source источник
comment
Когда вы говорите через мой веб-сайт, что именно вы имеете в виду? Использует ли ваш сайт особые формы телепатии, а не URL-адреса для доступа к файлу?   -  person Lior Cohen    schedule 28.09.2012
comment
@LiorCohen, нет, сэр. Я имею в виду, что этот файл должен быть доступен только через мою веб-страницу или файл (ы) HTML, а не через URL-адрес прямой ссылки.   -  person ThN    schedule 28.09.2012


Ответы (4)


Вы можете запретить доступ к каталогу для каждого IPA, кроме сервера:

<Directory /dir/of/presentation>
    Order Allow,Deny
    Allow from 127.0.0.1
    Deny from All
</Directory>

Как вы отметили, эта дурацкая работа.

Как насчет использования Mod Rewrite с правилом, которое отображает / dir / of / presentation / * на запрещенную страницу. Тогда прямая ссылка работать не будет. Запрос на http://site/content/presentation.ppt
может быть перенаправлен на http://site/forbidden.html

Внутри вы можете сделать ссылку на http://authorizedRequest/presentation.ppt сопоставить с http://site/content/presentation.ppt

Это просто безопасность через безвестность. Это не помешает кому-либо ввести ваш "секретный" URI напрямую в браузер.

person nunzabar    schedule 28.09.2012
comment
И как тогда «посетители» (законные) должны получить доступ к файлам? - person arkascha; 29.09.2012
comment
Внимательно перечитав ваш вопрос, я вижу, что мое решение не сработает. Вы хотите, чтобы файл был напрямую доступен по его URI, только если они щелкнули ссылку на вашем сайте. Я не знаю безопасного способа сделать это. - person nunzabar; 29.09.2012
comment
@nunzabar, понятно. Вы правы в том, что прямого способа сделать это, похоже, не существует. Я помню, как посещал определенные веб-сайты, где вы можете просматривать их изображения на их веб-сайте (веб-странице), но если вы попытаетесь получить доступ к самому изображению, вызвав его прямой URL-адрес, оно перенаправит вас на запрещено.html или страницу. Вот чего я пытаюсь достичь. - person ThN; 29.09.2012

Например, скажем, у меня есть файл под названием Presentation.ppt. Я хочу, чтобы посетитель имел доступ к нему через мой веб-сайт, но если они попытаются загрузить его или получить к нему доступ по прямой ссылке, сервер должен отклонить запрос.

Можно ли это сделать с помощью .htaccess?

Это возможно, но есть способы обойти это. Вам нужно проверить ссылку, отправленную браузером, но любой может подделать это, а иногда браузер может даже не включать ссылку.

Если вы пытаетесь защитить файл Presentation.ppt, поместите эти правила в файл htaccess в корне вашего документа:

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^(https?://)?your_website.com
RewriteRule ^/?path/to/Presentation.ppt - [L,F]

Если вы хотите защитить папку /path/images/, тогда:

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^(https?://)?your_website.com
RewriteRule ^/?path/images - [L,F]
person Jon Lin    schedule 28.09.2012

Спасибо всем за ответы. Я испробовал все ваши предложения, но все равно не смог заставить их работать. Однако я нашел решение, которое действительно работает.

Шаг 1. Отключите или отключите индексы параметров на своем веб-сервере, удалив индексы слов, оставив все остальное без изменений. В некоторых случаях это можно сделать с помощью файла .htaccess. Если вы не можете сделать это с помощью .htaccess, вам придется искать файл httpd.conf на своем сервере. Обычно он находится в etc / apache / httpd.conf или etc / httpd / conf / httpd.conf. Как только вы его найдете, отключите эту опцию там.

Шаг 2: Создайте папку в папке своей веб-страницы и назовите ее как хотите, но убедитесь, что ее сложно угадать или что она очевидна (например, Joe33CompanyOCT2MeBoss). Затем переместите в эту папку файлы, которые вы хотите скрыть или защитить от посетителей.

Шаг 3. В файле robot.txt запретите всем ботам или сканерам индексировать вашу папку или файлы в этой папке, введя «Запретить имя вашей папки».

Шаг 4: Затем вам нужно будет создать файл PHP, используя аналогичный приведенный ниже код. Приведенный ниже код приведет к принудительной загрузке.

        $File1 = 'http://yourwebsite.com/Joe33CompanyOCT2MeBoss/Presentation.ppt';
        header("Content-Disposition: attachment; filename=\"".basename($File1)."\"");
        header("Content-Type: application/force-download");
        ob_end_clean();
        flush();
        readfile($File1);
        exit;

Таким образом, прямой путь к файлу скрыт от вашего посетителя, и даже если они могут загрузить файл напрямую, они просто не знают фактического URL-адреса файла, потому что код принудительной загрузки php не показывает фактический путь к файлу. Итак, теперь мои посетители моего веб-сайта должны пройти через мою веб-страницу для загрузки этого файла, а не напрямую.

Следующие вопросы о stackoverflow очень помогли мне решить мои проблемы с программированием. Спасибо,

Как автоматически начать загрузку в PHP?

принудительная загрузка файла php

person ThN    schedule 02.10.2012

Самый простой (хотя и небезупречный) - перенаправить пользовательский агент, когда HTTP_REFERER неверен. Это можно сделать с помощью mod_rewrite в конфигурации сервера или (второй вариант) внутри файла, подобного .htaccess. Это помогает против простого хотлинкинга (ссылки, ссылающиеся на ваш файл по URL-адресу).

Вы должны прочитать прекрасную документацию по моапачам d_rewrite.

person arkascha    schedule 28.09.2012