Использование htaccess для защиты изображений - PullRequest
1 голос
/ 03 ноября 2011

Я близок к запуску веб-сайта по фотографии и хочу защитить свои изображения.У меня есть следующее в результате поиска в Интернете:

#Set FollowSymLinks, in most cases already set on the server
Options +FollowSymLinks
#Enable Indexes
Options +Indexes
#Turn on the Rewrite Engine
RewriteEngine on
#Allow my domain
RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?mydomain.com [NC]
#Allow another domain
#RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?anotherdomain.com [NC]
#Allow blank referrers or delete this line to block them
#Deleting this line also blocks access to images by filepaths
RewriteCond %{HTTP_REFERER} !^$
#Allow search engines
RewriteCond %{HTTP_REFERER} !google. [NC]
RewriteCond %{HTTP_REFERER} !search?q=cache [NC]
RewriteCond %{HTTP_REFERER} !msn. [NC]
RewriteCond %{HTTP_REFERER} !yahoo. [NC]
#File types to be blocked
RewriteRule \.(jpg|jpeg|png|gif)$ - [NC,F,L]
#OR
#First allow an image to be hotlinked to avoid looping
#RewriteCond %{REQUEST_URI} !^mydomain.com/image/hotlinker.gif$
#Then display it as a custom image
#RewriteRule .(jpg|jpeg|png|gif)$ mydomain.com/image/hotlinker.gif [NC,R,L]

1) Есть ли способ остановить вызов изображения при вводе его пути к файлу, который не включает блокировку пустых ссылок?У меня есть несколько случаев, когда я хотел бы сделать это, но не весь сайт.

2) У меня есть правильный код, чтобы разрешить Google, MSN и Yahoo правильный доступ к моим изображениям?

3) Код, который я имею, объединен из более чем одного источника.Поскольку я ничего не знаю о синтаксисе, мне интересно, почему только первый RewriteRule без замещающего изображения начинается с \, а не со второго?

Цените любые отзывы, спасибо.

Ответы [ 2 ]

3 голосов
/ 03 ноября 2011

1) Есть ли способ остановить вызов изображения путем ввода его пути к файлу, который не включает блокировку пустых ссылок? У меня есть несколько случаев, когда я хотел бы сделать это, но не весь сайт.

Я не думаю, что есть выход, но вы можете перечислить исключения в RewriteCond для отдельного набора правил:

# Check to see if referer is blank
RewriteCond %{HTTP_REFERER} ^$
# Check to see if it isn't one of the files we're going to allow blank referers
RewriteCond %{REQUEST_URI} !^/images/allow_blank_referer/
RewriteCond %{REQUEST_URI} !profile_picture\.png$
# Block images
RewriteRule \.(jpg|jpeg|png|gif)$ - [NC,F,L]

В этом примере будут заблокированы все пустые рефереры, кроме любых запрашивающих изображений из /images/allow_blank_referer/ и любого изображения, заканчивающегося profile_picture.png.

2) У меня есть правильный код, чтобы обеспечить Google, MSN и Yahoo надлежащий доступ к моим изображениям?

Нет, эти строки в вашем .htaccess:

RewriteCond %{HTTP_REFERER} !google. [NC]
RewriteCond %{HTTP_REFERER} !search?q=cache [NC]
RewriteCond %{HTTP_REFERER} !msn. [NC]
RewriteCond %{HTTP_REFERER} !yahoo. [NC]

Просто разрешите людям, которые загружают изображение, связанное с google / msn / yahoo, и свои поисковые кэши. Например, если кто-то выполняет поиск изображений в Google и нажимает на одно из ваших изображений, вы их не заблокируете.

Чтобы убедиться, что роботы google, msn и yahoo не заблокированы, нужно проверить HTTP_USER_AGENT, например, в тех условиях перезаписи, которые вы можете вставить:

RewriteCond %{HTTP_USER_AGENT} !googlebot [NC]
RewriteCond %{HTTP_USER_AGENT} !msnbot [NC]
RewriteCond ${HTTP_USER_AGENT} !slurp [NC]

Они будут пропускать проверки реферером, если в пользовательском агенте присутствует какая-либо из этих трех вещей (slurp = Yahoo!), список пользовательских агентов можно получить из таких мест, как http://www.robotstxt.org/db.html

3) Код, который у меня есть, объединен из более чем одного источника. Поскольку я не знаю синтаксиса, мне интересно, почему только первый RewriteRule без замещающего изображения начинается с \, а не со второго?

Первый имеет «\», чтобы избежать «.». "." в регулярном выражении соответствует чему-либо, что-то вроде подстановочного знака, и «\» избегает его, что означает «я действительно имею в виду точку, а не подстановочный знак» В закомментированном RewriteRule отсутствует "\", вероятно, потому, что кто-то ленив. Он по-прежнему будет соответствовать запросу, заканчивающемуся, например, .gif, но он также будет соответствовать чему-то, оканчивающемуся на zgif, тогда как первый RewriteRule не будет. Если вы собираетесь использовать закомментированный RewriteRule (если вы это сделаете, обязательно закомментируйте RewriteRule \.(jpg|jpeg|png|gif)$ - [NC,F,L]), я бы предложил поставить "\" перед этим первым периодом.

0 голосов
/ 04 ноября 2011

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

#Set FollowSymLinks, in most cases already set on the server
Options +FollowSymLinks
#Enable Indexes
Options +Indexes
#Turn on the Rewrite Engine
RewriteEngine on
#Allow my domain
RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?mydomain.com [NC]
#Allow another domain
#RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?anotherdomain.com [NC]
#Allow blank referrers or delete this line to block them
#Deleting this line also blocks access to images by filepaths
RewriteCond %{HTTP_REFERER} !^$
#Allow users to follow images from search engines
RewriteCond %{HTTP_REFERER} !google. [NC]
RewriteCond %{HTTP_REFERER} !search?q=cache [NC]
RewriteCond %{HTTP_REFERER} !msn. [NC]
RewriteCond %{HTTP_REFERER} !yahoo. [NC]
#Ensure search engines aren't blocked from indexing images (slurp is yahoo)
RewriteCond %{HTTP_USER_AGENT} !googlebot [NC]
RewriteCond %{HTTP_USER_AGENT} !msnbot [NC]
RewriteCond ${HTTP_USER_AGENT} !slurp [NC]
#File types to be blocked
RewriteRule \.(jpg|jpeg|png|gif)$ - [NC,F,L]
#OR
#First allow an image to be hotlinked to avoid looping
#RewriteCond %{REQUEST_URI} !^mydomain.com/image/hotlinker.gif$
#Then display a custom image
#RewriteRule \.(jpg|jpeg|png|gif)$ mydomain.com/image/hotlinker.gif [NC,R,L]

Что касается моего вопроса 1), сценарий, который у меня есть, представляет собой специальную папку, содержащую несколько изображений, которые я пытаюсь обеспечить некоторой защитой (я сделал все очевидные HTML и Javascript вещи, которые, я знаю, не является полным доказательством) .

Если я добавлю туда .htaccess, чтобы остановить кэширование или индексацию изображений (хотя мой robots.txt должен это предотвратить), можно ли будет также обнаружить непустые ссылки и применить ограничение пути к файлам только к ним? Оставляя только пустые источники, которые могут получить изображения по пути к файлу.

Мой .htaccess будет выглядеть примерно так, с учетом моего вопроса выше:

<FilesMatch "\.(jpg|jpeg|png|gif|bmp)$">
Header set Cache-Control: "no-store, no-cache, must-revalidate, pre-check=0, post-check=0, max-age=0"
</FilesMatch>
#Set FollowSymLinks, in most cases already set on the server
Options +FollowSymLinks
#Enable Indexes
Options +Indexes
#Turn on the Rewrite Engine
RewriteEngine on
#Allow my domain
RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?mydomain.com [NC]
#TEST HERE IF THE USER IS NOT A BLANK REFERRER
?????????????????????????????
#IF NOT BLOCK ACCESS TO IMAGES BY ENTERING FILEPATH
RewriteCond %{HTTP_REFERER} ^$
#File types to be blocked
RewriteRule \.(jpg|jpeg|png|gif)$ - [NC,F,L]

Надеюсь, это имеет смысл. Спасибо

...