ホームページ  >  記事  >  バックエンド開発  >  PHP アンチホットリンクの実装

PHP アンチホットリンクの実装

WBOY
WBOYオリジナル
2016-07-29 08:50:531183ブラウズ

当社の Web サイトにアクセスするユーザーが特定のリンクまたはページからのみ当社の Web サイトにアクセスできることを希望する場合があります。この場合、ホットリンク対策テクノロジーを実装する必要があります。これは、http プロトコルのリファラー コンテンツ フィルタリングを使用します。

たとえば、パス http://localhost/http/fdl_one.php を持つローカル Web ページがあり、コンテンツは次のとおりです。

<a href="fdl_two.php">click here to see more</a>
パス http://localhost/ を持つ別の Web ページがあります。 http/fdl_three.php 、内容は次のとおりです。
<a href="fdl_two.php">I also want to see more</a>
これら 2 つの Web ページがアクセスしたいページ、つまり http://localhost/http/fdl_two.php には、個別にアクセスできます。ただし、fdl_three.php へのアクセスを除外する場合、つまり、fdl_one.php のハイパーリンクからのみ fdl_two.php にアクセスできるようにする場合、fdl_two.php の内容は次のようになります。
<?php
	if(isset($_SERVER[&#39;HTTP_REFERER&#39;])){
		if(strpos($_SERVER[&#39;HTTP_REFERER&#39;],"http://localhost/http/fdl_one.php")===FALSE){
			header("Location:http_test_err.php");
		}else{
			echo "yes,you can see it now.";
		}
	}else{
		header("Location:http_test_err.php");//如果用户不是通过链接点击,此时不会有referer,跳转到禁止访问提示页面
	}
	
?>

http_test_err.php にはアクセス禁止情報が格納されています。

strpos の戻り値については言及する価値があります。パラメータ 1 の文字列内でパラメータ 2 の文字列が存在する開始位置を返します。パラメータ 2 が見つからない場合は、FALSE が返されます。したがって、使用する場合は、一致するかどうかを最初に判断する必要があります。このとき、戻り値の型と値を厳密に制御し、=== 記号を使用する必要があります。 (マッチング時に戻り値が0になる可能性があるため!!)

実際によく使われるのは、あるページは自分のサイトからはアクセスできるが、他のサイトからはアクセスできないということです。このとき、strpos関数のパラメータ2の内容を自サイトのディレクトリ名に変更するだけです。他の訪問をフィルタリングして除外できます。


上記では、アンチホットリンクと PHP コンテンツを含む、PHP でのアンチホットリンクの実装について紹介しました。PHP チュートリアルに興味のある友人に役立つことを願っています。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。