0

ホットリーチングの問題に遭遇したので、Web サイトを検索したところ、2 つの解決方法が見つかりました。1 つ目は、以下に示すコードを使用した簡単でシンプルな方法です。

RewriteEngine On 
RewriteCond %{HTTP_REFERER}!^$ Options +FollowSymlinks 
RewriteCond %{HTTP_REFERER}!^http://(www\.)?mydomain.com(/)?.*$ [NC] 
RewriteRule .*\.(gif¦jpg¦jpeg¦png¦swf)$ [mydomain.com...] [R,NC]"

これは単純なリーチングを防ぐことしかできませんが、決心した人には何もできません。

もう 1 つの方法は、スクリプトと Cookie ベースのアプローチを使用するより優れた方法です。彼らは、「サイトの「許可された」ページに Cookie を設定し、画像リクエストに正しい Cookie が存在する場合にのみ、スクリプトを使用して画像を提供します。画像は、スクリプトのみがアクセスできるディレクトリに保存され、 Web 経由ではありません。そのため、スクリプトはサイトの '画像サーバー' として機能します。" 私はこの原則を理解していますが、それを実現する方法がわかりません。これを実現する方法を知っている人はいますか?

どんな助けでも感謝します。

4

1 に答える 1

1

私は実際に実装を与えることはできませんが、それをどのように達成できるかについてのいくつかのアイデアだけがあります。

ユーザーのCookieを設定する「ポータル」ページが必要になります。サイトのCookieがないリソースのリクエストは、ここにリダイレクトする必要があります。サイトの目的によっては、ここにログインメカニズムがない場合もありますが、通常は、ユーザーがログインした後にCookieを設定します。

すべてのリソースリンクは、同じ「スクリプト」ページにリンクします。違いは、リソースが異なれば識別子も異なることです(IDからファイルへのパスマッピングのデータベースを維持している場合は、ある種のIDになる可能性があります)。識別子はURLのクエリに含まれている必要があります。「スクリプト」は、識別子に基づいてサーバー上のリソースを検索します(IDからファイルへのマッピングの場合、ファイルパスを取得し、ファイルを取得します)。

たとえば、phpコードなどの「スクリプト」ページがあります。Cookieをチェックし、次に識別子をチェックし、それに応じてリソースをロードします。また、リファラーをチェックしてアクセスをもう少し制限することもできます(チェックしないと、ログインしているすべてのユーザーに対してホットリンクが機能します)。


この実装では、リソースへのホットリンクの共有は、「ポータル」ページにアクセスしていない(またはWebサイトによってはログインしていない)ユーザーには機能しません。また、ログインしているユーザーが別の場所からリンクをクリックすると、機能しなくなります。

ただし、スクレイパーはHTTPヘッダーを自由に調整できるため、質問で説明した両方の実装で、リソースのためにWebサイトをスクレイピングするのは簡単です。

于 2012-05-31T08:07:14.847 に答える