Защита папки с изображениями/видео в 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>
1 answers
Это проверяет, установлен ли 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/
)
В вашем случае предпочтительнее второй вариант, потому что у вас там другие правила
ПРАВКА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]