1

私は写真のウェブサイトを立ち上げるところです、そして私の画像にいくらかの保護を与えたいです。ウェブで検索した結果、次のようになりました。

#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番目の画像ではないのはなぜだろうか。

フィードバックに感謝します、ありがとう。

4

2 に答える 2

3

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で画像検索を行い、あなたの画像の1つをクリックしても、それらをブロックすることはありません。

google、msn、およびyahooボットがブロックされないようにするために実行したいことは、たとえば、挿入できるこれらの書き換え条件の下でHTTP_USER_AGENTをチェックすることです。

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

これらの3つのうちのいずれかがユーザーエージェント(slurp = Yahoo!)に存在する場合、これらはリファラーチェックをバイパスします。http://www.robotstxt.org/db.htmlなどの場所からユーザーエージェントのリストを取得できます。

3)私が持っているコードは複数のソースからマージされています。構文の知識がないので、代替画像のない最初のRewriteRuleだけが\で始まり、2番目の画像ではないのはなぜだろうか。

最初のものには、「。」をエスケープするための「\」があります。「。」正規表現では、ワイルドカードのようなものに一致し、「\」はそれをエスケープします。これは、「ワイルドカードではなく、実際にはピリオドを意味します」という意味です。コメントアウトされたRewriteRuleには、おそらく誰かが怠惰だったために「\」がありません。たとえば、で終わるリクエストには引き続き一致しますが、最初のRewriteRuleは一致しないのに対し、.gifで終わるものにも一致します。zgifコメントアウトされたRewriteRuleを使用する場合(使用する場合は、必ずコメントアウトしてくださいRewriteRule \.(jpg|jpeg|png|gif)$ - [NC,F,L])、最初のピリオドの前に「\」を付けることをお勧めします。

于 2011-11-03T19:50:02.590 に答える
0

したがって、ルートディレクトリに移動するように修正したコードは次のようになります。

#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]

これが理にかなっていることを願っています。ありがとう

于 2011-11-04T14:06:24.677 に答える