Защита папки с изображениями / видео в 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]
Примечание: достаточно просто "сломать" эту защиту, если кто-то захочет украсть ваш контент, однако, она предотвращает хотлинкинг без необходимости создавать какой-то скрипт, который бы передавал все изображения / видео, чтобы проверить, должен ли быть доступ предоставляется.
РЕДАКТИРОВАТЬ:
Если ваш сайт не в /
, У вас есть два варианта:
+ Изменить
RewriteBase
отражать базовый URI сайта (например,RewriteBase /app/webroot/
)+ Изменить
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]