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

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

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

1 ответ

Решение

Это проверяет, если 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/)

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

EDIT2:

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

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]
Другие вопросы по тегам