Защита папки с изображениями/видео в cakephp 2.0


В настоящее время мы используем папки внутри webroot для хранения изображений и видео, которые мы загружаем в представления (используя обычный помощник по изображениям html), для которых требуется войти в систему.

Как я могу запретить внешним посетителям просто использовать URL-адрес site.com/img/photos/1.jpg и получать доступ к изображениям? Из того, что я понимаю, я не могу использовать мультимедийные представления для отображения изображения в правильном представлении, и я не могу понять, есть ли решение с помощью манипуляций htaccess.

Что является наилучшей практикой для это? Возможно, было бы лучше выбрать папку, отличную от webroot (хотя это усложнило бы задачу хранения файлов)?

Как и предлагал понча, я попытался отредактировать основной файл .htaccess в этот

<IfModule mod_rewrite.c>
   RewriteEngine on
   RewriteCond %{HTTP_REFERER} !localhost
   RewriteCond %{REQUEST_URI} ^app/webroot/img/
   RewriteRule .* / [L,F]
   RewriteRule    ^$ app/webroot/    [L]
   RewriteRule    (.*) app/webroot/$1 [L] 
</IfModule>

Но базовая строка перезаписи, похоже, запрещает доступ ко всему сайту, и без нее, похоже, нет изменений в доступе к img.

Правка 2: Редактирование htaccess внутри webroot:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php [QSA,L]

# this RewriteCond is needed to avoid rewrite loops
RewriteCond %{REQUEST_URI} !^/app/webroot/
RewriteRule (.*) app/webroot/$1 [L,R]


RewriteCond %{HTTP_REFERER} !127.0.0.1
RewriteCond %{REQUEST_URI} ^/app/webroot/img/
RewriteRule .* - [L,F]

</IfModule>
Author: dot, 2012-06-26

1 answers

Это проверяет, установлен ли Referer http-заголовок на что-то, содержащее ваш домен, и запрещает доступ к img/папке, если нет.

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_REFERER} !site.com
RewriteCond %{REQUEST_URI} ^img/
RewriteRule .* / [L,F]

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

ИЗМЕНИТЬ:

В случае, если ваш веб-сайт не находится в /, у вас есть два варианта:

  1. Измените RewriteBase, чтобы отразить базовый uri сайта (например RewriteBase /app/webroot/)

  2. Измените RewriteCond, чтобы отразить путь от / (например RewriteCond ^app/webroot/img/)

В вашем случае предпочтительнее второй вариант, потому что у вас там другие правила

ПРАВКА2:

В вашем случае весь набор должен выглядеть так:

RewriteEngine on
RewriteBase /

# this RewriteCond is needed to avoid rewrite loops
RewriteCond %{REQUEST_URI} !^/app/webroot/
RewriteRule (.*) app/webroot/$1 [L,R]

RewriteCond %{HTTP_REFERER} !localhost
RewriteCond %{REQUEST_URI} ^/app/webroot/img/
RewriteRule .* - [L,F]
 2
Author: poncha, 2012-06-26 13:49:26