2015-12-07 3 views
0

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

deny from all 

Так вот мои вопросы:

  • У меня возникнут проблемы, если я не перемещу папку вне веб-корня? Потому что мне придется внести много изменений в код на всех страницах. Какова логика перемещения папки изображений за пределы веб-корня?

  • Есть ли другой безопасный способ сделать это? Я беспокоюсь, что если добавить .htaccess, который запретит доступ ко всем изображениям, я не смогу поделиться своими страницами и использовать изображения в них.

UPDATE:

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

RewriteEngine on 
RewriteCond %{HTTP_REFERER} !^$ 
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yourdomain.com [NC] 
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yordomain2.com [NC] 
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yordomain3.com [NC] 
RewriteRule \.(jpg|jpeg|png|gif)$ http://page-to-redirect [NC,R,L] 

ответ

1

Если вы переместите папку с изображениями за пределами вашего веб-сервера, вам не нужно, что .htaccess. Каталоги вне вашего веб-корня не могут быть доступны извне.

Таким образом, вы можете сделать то и другое, но не вместе. В любом случае ваши изображения не могут быть использованы на вашем сайте, пока они недоступны. Чтобы показать изображение на своем сайте, оно должно быть «загружаемым».

Надеюсь, что это поможет.

+0

Спасибо, я ценю ваш вход. Значит, я не могу фактически отрицать свои образы, независимо от того, что я выбираю, поскольку они не будут «загружаемыми»? Это то, что вы имели ввиду? – Mdermez

+0

Да, это правильно.Технически показ изображения на вашей странице совпадает с загрузкой этого изображения. –

1

1) перенаправлять все запросы к папке изображений в сценарий index.php с помощью .htaccess:

# Turn rewriting on 
Options +FollowSymLinks 
RewriteEngine On 
# Redirect requests to index.php 
RewriteCond %{REQUEST_URI} !=/index.php 
RewriteCond %{REQUEST_URI} !.*\.png$ [NC] 
RewriteCond %{REQUEST_URI} !.*\.jpg$ [NC] 
RewriteCond %{REQUEST_URI} !.*\.gif$ [NC] 
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA] 

2) В вашем index.php сделать некоторую логику, чтобы определить, если изображение должно быть подано.

// Do some checking... 
$safe = true; // determine if the image should be served 
if($safe){ 
    header("content-type: image/png"); // or gif or jpg 
    readfile($_GET['q']); 
} 
+0

Можете ли вы проверить мой обновленный вопрос :) Я ценю ваш вклад. – Mdermez

0

Вы можете добавить в файл .htaccess

Options -Indexes 

для предотвращения рецензирования содержимого папок изображений.

Другой способ, которым вы можете поместить индексный файл в папку с изображениями.

Если вы публикуете некоторые изображения на страницах, их невозможно ограничить.

+0

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

+1

Я согласен, но printscreen может захватить все, и он очень популярен сейчас, особенно для пользователей планшетных компьютеров. Обрезка - тоже непростая задача. Думаю, водяной знак все еще лучше защищает. – toor

1

Я использую, что для одной и той же проблемой:

Options -Indexes 
RewriteEngine On 
# Only from this website 
RewriteCond %{HTTP_REFERER} !^$ 
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?yourdomain\.com [NC] 
RewriteRule \.(jpe?g|gif|png|bmp)$ - [NC,F] 

# To prevent access to crawlers 
RewriteCond %{HTTP_USER_AGENT} (?:google|tineye) [NC] 
RewriteRule \.(jpe?g|gif|bmp|png)$ - [NC,F] 

Это действительно не блокирует доступ к изображениям, но доступ из веб-сайтов других страниц.

Смежные вопросы