web-dev-qa-db-ja.com

ファイルの直接URLアクセスを防ぐ方法は?

私はApacheを使用していますが、Local HostにサンプルのWebフォルダーがあります。

      http://localhost/test/

testフォルダー内のファイル:

     index.html  
     sample.jpg  
     .htaccess  

index.htmlのサンプルソース:

<html>
  <body>
    <img src="sample.jpg" />
  </body>
</html>

http://localhost/test/でWebサイトを実行すると、単にページに画像「sample.jpg」が表示されます。


問題:

  • URLバーにhttp://localhost/test/sample.jpgとして直接表示される画像を防ぎたい。

注:すべてのブラウザーでテストすると、以下のソリューションが機能することがわかりましたFirefoxを除く

61
夏期劇場

以下を試してください:

RewriteEngine on 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost [NC] 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost.*$ [NC] 
RewriteRule \.(gif|jpg)$ - [F]

画像に直接アクセスする場合は403を返しますが、サイトに表示することはできます。

注:画像を含むページを開いて、その画像のパスをアドレスバーにコピーすると、その画像が表示される場合があります。これは、ブラウザのキャッシュが原因で、実際には画像がサーバーからロードされていません(Davoから、以下の完全なコメント)

99
Ruslan Osipov

rosipovのルールはうまくいきます!

私はライブサイトでそれを使用して、空のファイルまたは特別なメッセージを表示します;)直接ビューから少し保護するために、ファイルへの直接アクセスの試みの代わりに。 403 Forbiddenよりも楽しいと思う。

したがって、rosipovのルールを使用して、directリクエストを{gif、jpg、js、txt}ファイルにリダイレクトして、 'messageforcurious'にリダイレクトします。

RewriteEngine on 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?domain\.ltd [NC] 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?domain\.ltd.*$ [NC] 
RewriteRule \.(gif|jpg|js|txt)$ /messageforcurious [L]

たとえば、CMS sensible files xml、javascriptのようなセキュリティへの直接アクセスを禁止する丁寧な方法だと考えています。彼らのアルゴリズムは、私の「messageforcurious」から作成されます。

22
tuk0z

まず、メインのApacheの構成ファイルhttpd.confの場所を見つけます。 Debianを使用している場合は、/etc/Apache/httpd.confにあるはずです。 VimやNanoなどのファイルエディターを使用してこのファイルを開き、次のような行を見つけます。

Options Includes Indexes FollowSymLinks MultiViews

次に、Wordインデックスを削除してファイルを保存します。行は次のようになります。

Options Includes FollowSymLinks MultiViews

完了したら、Apacheを再起動します(例:Debianの/etc/init.d/Apache restart)。それでおしまい!

8
Kaushal

あなたのコメントに基づいて、これがあなたが必要なもののように見えます:

RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost/ [NC] 
RewriteRule \.(jpe?g|gif|bmp|png)$ - [F,NC]

ローカルホストでテストしましたが、うまく機能しているようです。

7
anubhava

Webサーバーで使用した場合、次のようにローカルホストの名前のみ変更できます。

RewriteEngine on 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?mydomain.com [NC] 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?mydomain.com.*$ [NC] 
RewriteRule \.(gif|jpg)$ - [F]
0
Newbie