web-dev-qa-db-ja.com

サーバー上のスクリプトがファイルにアクセスすることを許可しながら、URL入力を介したファイルへの直接アクセスをブロックする

私は次のことを達成しようとしていますが、失敗しました。私はどんな洞察にも感謝します。シナリオ: http://www.mydomain.com/filename.html はWebページです。このWebページでは、ドキュメント(.png、swf、pdf)を呼び出し、訪問者が.htmlページにアクセスしたときにこれらを表示するビューアースクリプトを実行しています。今でも、pdg、swf、pdfファイルにアクセスできます。 http://www.domainname.com/viewerfiles/nameoffile.png (またはswfまたはpdf)に移動します。直接アクセス(http://www.domainname.com/viewerfiles/nameoffile.png)をブロックしながら、htmlページ上にあるビューアがviewrfilesフォルダーにあるファイルにアクセスすることをどのようにして許可できますか? .htaccessメソッドを試しましたが、ファイルに直接アクセスできます。私の目標は、訪問者がWebページからファイルを表示および印刷できるようにすることですが、.pdf、png、swfなどをインデックス付け/取得して他のサイトでホストするスクレイパーやボットは必要ありません。ありがとう!

1
Tracy

基本的な理由により、やりたいことを行うことはできません。ユーザーがクライアントを制御します。サーバー側から、サーバーは、ページ上の画像をリクエストしている正当なブラウザー(画像を提供したい場合)を、直接アクセスしようとしている悪意のあるユーザーと区別する方法がありません。画像(画像を配信したくない場合)。これらの2つの状況はサーバーの観点から区別できないため、サーバーはどちらの場合も同じように動作する必要があります。どちらの場合も画像を提供するか、提供しないかのどちらかです。

実際に達成しようとしていることを再検討し、それを達成する他の方法があるかどうかを確認することができます。何を防ごうとしているの?どの脅威から保護しようとしていますか?

スクレイピングを防止する場合は、ログインユーザーのみが画像を利用できるようにすることを検討してください。それがあなたのサイトに適切であるかどうか、またはそれが適切に一致していないかどうかを判断する必要があります(おそらく、すべての人がWebページと画像を表示できるようにする必要があります)。別のオプションは、ボットが画像をダウンロードしないように親切に要求するように robots.txt file を設定することです。あなたはボットの善意に頼らざるを得ません。正常に動作するボットとスクレイパーは通常、robots.txtの指示に従います。悪意のあるユーザーは常にrobots.txtファイルを無視してサイトをこすり落とすことができますが、残念ながらそれを防ぐ方法はありません。悪意のあるユーザーは、利用できるようにしたコンテンツをいつでもダウンロードできます。認証されていないユーザー。そのため、robots.txtは、ほとんどの状況で、合理的に実行できる最善の方法について、間違いなくいくつかの点で異なります。

ユーザーが私のWebサイトから写真を盗むのを防ぐにはどうすればよいですか? および 他のユーザーが私のWebサイトの画像を使用できないようにするにはどうすればよいですか も参照してください。

3
D.W.

ユーザーがサイトからファイルをダウンロードするためのアクセス権を持っているかどうかのみを決定できます。決定されたユーザーがファイルに対して行う操作を制御することはできません。リクエストのプロパティを検査して、ファイルをリソースとしてメインページに埋め込むブラウザの典型的な動作を認識しようとすることもできますが、これらのプロパティは簡単に偽装でき、サイトの通常の使用法を破る傾向があります。

1
JGWeissman

画像のホットリンク保護を使用して直接アクセスできないようにする方法をグーグルで試してください。

ホスティングアカウントにcPanelがある場合、その手順は次のとおりです。 http://docs.cpanel.net/twiki/bin/view/AllDocumentation/CpanelDocs/HotLinkProtection

0
AWebGuru

Apache構成でmod_rewriteを確認することをお勧めします。

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

ブラウザのリンクからファイルに直接アクセスした場合は404ページが表示されますが、ウェブサイトのコードからアクセスした場合は404ページが表示されます。

0
grab-a