ホームページ  >  記事  >  バックエンド開発  >  PHP を使用してリファラーを偽造し、リファラーを使用して画像のホットリンクを防ぐ方法_PHP チュートリアル

PHP を使用してリファラーを偽造し、リファラーを使用して画像のホットリンクを防ぐ方法_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:40:31952ブラウズ

HTTPリファラーとは
要するに、HTTPリファラーは、ブラウザがWebサーバーにリクエストを送信するときに、通常、どのページからリンクしているかをサーバーに伝えるためにリファラーをもたらし、サーバーは使用します。この一部の情報は処理のために取得できます。たとえば、私が私のホームページから友人にリンクした場合、彼のサーバーは、毎日何人のユーザーが私のホームページ上のリンクをクリックして彼の Web サイトにアクセスしたかを HTTP リファラーからカウントできます。
リファラーは実際には英語の単語 Referrer であるべきですが、スペルを間違える人が多すぎるため、標準を作成した人が間違えただけです。
私の問題
フィードリーダーをGregariusに変更したところですが、以前使用していたlifereaとは異なります。Sinaブログにアクセスすると、写真が表示されず、「この写真はSinaブログユーザー専用です。通信して通信します」、これは HTTP リファラーが原因であることはわかっています。
私のインターネット クライアントの構成の特殊性により、最初は Squid の問題ではないかと疑ったのですが、実験によって否定されました。しかし、Squid、Tor、Privoxy の共同使用に関連するプライバシー漏洩の問題も発見しました。 、これは将来の研究のために残されます。
Gregarius はこの問題に対処できますか?
答えは「ノー」です。Gregarius は HTML コードの出力のみを担当し、画像へのアクセスはクライアントのブラウザーによってサーバーから要求されるからです。
ただし、Firefox 拡張機能をインストールすると問題が解決する可能性があります。記事で推奨されている「Send Referrer」は見つかりませんでしたが、別の利用可能なものを見つけました。それは、さまざまな Web サイトに応じてさまざまなリファラーの使用を制御できる「RefControl」です。訪問しました。
しかし、問題を解決するために Firefox 拡張機能を使用するのはあまりにも非効率的であるため、私は好まないので、より良い方法である Privoxy を使用します。
Privoxy は素晴らしいです
Privoxy のdefault.action に次の 2 行を追加します:
{+hide-referrer{forge}}
.album.sina.com.cn
そうすれば、Gregarius に Sina ブログの画像が表示されますよね? +hide-referrer は Privoxy のフィルターで、アクセス時の HTTP Referer の処理方法を設定します。また、Referer をブロックする、または直接使用することもできます。使用する必要があるリファラー URL がここに記述されます。
Privoxy の使用は Firefox を使用するよりもはるかに簡単なので、すぐに切り替えてください。
https から http へ
また、https ページのリンクから暗号化されていない http ページにアクセスすると、http ページで HTTP リファラーを確認できないこともわかりました。たとえば、https ページをクリックすると、w3c xhtml が表示されます。検証アイコン (URL は http://validator.w3.org/check?uri=referer) は検証を完了できず、次のメッセージが表示されます:
Referer ヘッダーが見つかりません!
RFC ドキュメントがあることが判明しましたhttp プロトコルで定義:

コードをコピー コードは次のとおりです:

15.1.3 URI の機密情報のエンコード

クライアントは、参照ページが安全な
プロトコルで転送された場合、(非安全な)HTTPリクエストにRefererヘッダーフィールドを含めるべきではありません

これは、暗号化されていないページにアクセスする場合、ソースが暗号化されたページである場合、クライアントは常にこれを実装しており、Firefox ブラウザーも例外ではありません。ただし、これは、暗号化されたページから暗号化されたページへのアクセスには影響しません。

Firefox の Referer の設定はすべてここにあります。 2 つのキー値があります:
network.http.sendRefererHeader (デフォルト = 2) Referer の送信方法を設定します。0 はまったく送信しないことを意味し、1 はリンクをクリックしたときのみ送信することを意味します。 . ページ内の画像にアクセスした場合は送信されません。プライバシーに関するヒント #3: Firefox
network.http.sendSecureXSiteReferrer でリファラー ヘッダーをブロックする (default=true) を参照してください。 ある暗号化されたページから別の暗号化されたページにアクセスするときにリファラーを送信するかどうかを設定します。 true は送信を意味し、false は送信しないことを意味します。


画像のホットリンクを防ぐにはリファラーを使用してください

リファラーは信頼性がありませんが、画像のホットリンクを防ぐには十分です。実装は通常、Apache 設定ファイルを通じて行われます。まず、アクセスを許可するアドレスを設定し、それにマークを付けます。
# don.com からのアクセスのみが許可されます。
SetEnvIfNoCase Referer "^http://www.don.com/" local_ref
# アドレスを通じて直接アクセス
SetEnvIf Referer "^$" local_ref
次に、マークされたアクセスのみが許可されることを規定します:

コードをコピー コードは次のとおりです:
OrderAllow,Deny
Allow from env=local_ref



または

コードをコピーします コードは次のとおりです:
<ディレクトリ /web/images>
注文拒否、許可
すべてから拒否
env=local_ref




Referer を使用しないでください

Referer は、上で紹介した Firefox 拡張機能を使用する場合でも、Privoxy を使用する場合でも、クライアント側で非常に簡単に変更されるため、認証やその他の非常に重要なチェックには Referer を使用しないでください。または、これは libcurl からの呼び出しであるため、Referer データは非常に信頼できません。
ユーザーが特定の入り口ページにアクセスできないようにしたい場合は、Refererを使用するのではなく、セッションを使用して、入り口ページにセッションを記述し、ユーザーが入り口ページにアクセスしていないかどうかを他のページで確認することをお勧めします。の場合、対応するセッションは存在しません。ここでの説明を参照してください。ただし、上で述べたように、この方法の「検証」結果を過信しないでください。
個人的には、リファラーの最も一般的な用途は、ホットリンクの防止に使用されることに加えて、ユーザーがどのリンクからアクセスしたかなどの統計などのアクセス統計であると感じています。

PHP を使用してリファラーを偽造し、リファラーを使用して画像のホットリンクを防ぐ方法_PHP チュートリアル

変数 HTTP-REFERER はますます信頼性が低くなり、偽造される可能性があります。
偽装する方法は次のとおりです:

PHP (curl がインストールされている場合):

コードをコピーします コードは次のとおりです:

$ch =curl_init();
curl_setopt ($ch, CURLOPT_URL, "http://www.d .cn/ xxx.asp");
curl_setopt ($ch, CURLOPT_REFERER, "http://www.d.cn/");
curl_exec ($ch);
curl_close ($ch);

PHP (for curl をインストールせずに使用します) sock)
$server = 'www.dc9.cn';
$host = 'www.dc9.cn';
$target = '/xxx.asp';
$referer = 'http:/ /www.d.cn/'; // リファラー
$port = 80;
$fp = fsockopen($server, $port, $errno, $errstr, 30);
if (!$fp)
{
echo "$errstr ($ errno)
n";
}
else
{
$out = "GET $target HTTP/1.1rn";
$out .= "ホスト: $hostrn";
$ out .= "Cookie : ASPSESSIONIDSQTBQSDA=DFCAPKLBFICDAFMHNKIGKEGrn";
$out .= "リファラー: $refererrn";
$out .= "接続: Closernrn";
fwrite($fp, $out);
while (!feof( $fp))
{
echo fgets($fp, 128);
}
fclose($fp);
}

javascript
xmlHttp.setRequestHeader("Referer", "http://URL");// はは〜偽物〜

JS はサポートしていません ^_^

原理は、sock が http ヘッダーを構築してデータを送信することです。 Perl などの他の言語も使用できます。
現在、偽のリファラーを防御する簡単な方法は、検証コード (セッション) を使用することです。
現在、UUDOG、linkgate、VirtualWall などのホットリンク ソフトウェアを防止できる営利企業がいくつかあり、それらはすべて IIS で使用する DLL を開発しています。
Cookie 検証とスレッド制御を使用するものや、ファイル名をランダムに生成して URL 書き換えを実行できるものもあります。いくつかの方法では確かに良い結果が得られます
しかし、悪魔が悪魔と同じくらい優れている限り、これらの些細なトリックを突破する方法は存在します。
これは一般的に当てはまりますが、サーバーは偽造が容易ではなく、Web ページにアクセスすることで偽造できれば、自然な IP 配布が可能になります。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/718624.html技術記事 HTTP リファラーとは何ですか? 簡単に言うと、ブラウザが Web サーバーにリクエストを送信するときに、サーバーにどのページから来たのかを伝えるためにリファラーが組み込まれます。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。