ホームページ >バックエンド開発 >PHPチュートリアル >ホットリンクとは何ですか? PHP でリファラーを作成して反リーチング リソースをリクエストする方法 (例あり)

ホットリンクとは何ですか? PHP でリファラーを作成して反リーチング リソースをリクエストする方法 (例あり)

不言
不言転載
2019-01-26 10:26:283878ブラウズ

この記事では、ホットリンクとは何ですか? PHP でリファラーを作成して反リーチング リソースをリクエストする方法 (例付き)。これには特定の参照値があり、必要な友人がそれを参照できます。お役に立てば幸いです。

一部の製品では、閉鎖されたエコ音楽 Web サイトやビデオ Web サイトなど、盗まれたリンクから製品にアクセスされることを防ぐために、著作権侵害対策が講じられます。自社の製品を無料で使用してほしい。リソース。しかし、多くの人がホットリンクを専門としているため、ホットリンク、アンチホットリンク、およびアンチホットリンクの回避の原則を理解する必要もあります。

ホット リンク

Baidu Encyclopedia のホット リンクの定義を引用:

ホット リンクとは、サービス プロバイダー自体が技術を通じてサービスを提供していないコンテンツを指します。これは、他の有益なエンドユーザー インターフェイス (広告など) をバイパスし、エンドユーザーに他のサービス プロバイダーのサービス コンテンツを自分の Web サイトで直接提供し、エンドユーザーの閲覧率とクリックスルー率を騙すことを意味します。受益者はリソースをまったく提供しないか、ほとんど提供しませんが、実際のサービスプロバイダーは何の利益も受け取りません。

従来のホットリンク

Web サイトは、サーバーから HTML ファイルをリクエストすることでサービスを提供していることがわかります。このファイルには、css/js ファイルと img/video タグが含まれています。静的リソースは順番にリクエストを開始し、HTML ファイルがロードされるときに指定された場所にデータを埋め込み、ページ全体のロードを完了します。

ホットリンクとは何ですか? PHP でリファラーを作成して反リーチング リソースをリクエストする方法 (例あり)

したがって、この画像の URL を取得して独自の HTML ファイルに埋め込む限り、Web サイトからその画像にアクセスできます。これは、リソースが独立してアクセスされるためです。さまざまな HTTP リクエストを処理できるため、元のサイトの HTML ファイルをフィルタリングすることもできます。これは最も単純なホットリンクです。

危険: ユーザーがアクセスするとき、盗まれたリンク Web サイトにはアクセスしていませんが、Web サイトの帯域幅リソースは引き続き占有されるため、オペレーターは帯域幅の料金を支払う必要があります。同時に、ユーザーはウェブサイトの広告、周辺機器、宣伝、その他のリソースにアクセスできなくなります。

分散ホットリンク

分散ホットリンクはより複雑で、サーバー上に特別なプログラムを展開する必要があります。単一の Web サイトや単一の URL を対象としたものではありませんが、ネットワーク全体の有用なリソースはすべて盗まれて独自のデータベースに保存され、ユーザーが実際にアクセスすると、完全に独自のトラフィックに変換されます。

危険性: 労力、お金、著作権の支払いを通じて入手したリソース (オンライン ストアの写真、定期刊行物、テレビ シリーズなど) が、盗まれたリンク Web サイトによって無料で使用される可能性があります。その結果、会員やサービスは利益を得ることができなくなります。

反ホットリンク分類

元のサイトへのホットリンクの害を理解した後、当然のことながら、この行為を防止し、私たち自身の利益を守るために何らかの手段を使用する必要があります。 。

ウォーターマークの追加

これは最も簡単な方法です。バックエンド プログラムを使用して、画像やその他のリソースにバッチでウォーターマークを追加します。この方法では、ホットリンク中に、また、自分の Web サイトを宣伝するために、そのようなホットリンクを積極的に求めることもあります。

リソース名の変更

ホット リンクは指定された URL を経由するため、この URL にはリソースのパスと名前が含まれている必要があります。ディレクトリ名を指定すると、ホット リンクをすぐに回避できますが、ダウンロード中のリソースが中断される原因にもなります。

参照ページの制限

http リクエストのヘッダー情報には、フィールド「referer」があり、リクエストがどのページから開始されたかを表します。別のページで開かれている場合、またはサーバーによって要求されている場合、このフィールドは空になります。したがって、リファラーフィールドの値によって制限を設定することができ、認識したページであればリソースを返し、それ以外の場合はリクエストを禁止します。ただし、URL 照合のためにホワイトリストに登録されたファイルを毎回開く必要があるため、パフォーマンスが低下します。

暗号化認証

クライアントは、リソースの名前と組み合わせてユーザー認証情報を暗号化し、暗号化された文字列を URL のパラメーターとして使用して認証を開始します。要求されたリソースは、サーバーが復号化して認証した後にのみ返されます。この方法は主に分散ホットリンクを防ぐために使用されます。

アンチホットリンク プログラム

上記の 3 つのホットリンク対策方法のうち、一般に 3 番目の方法が使用され、これはリファラー属性を使用してホットリンク対策が完了します。 、私たちはまた、主にこの抗リーチングと抗リーチングの方法を共有します。

バックエンド プログラムの制限

この種の制限はサーバー側のコンピューティング リソースを消費するため、Nginx の制限ほど一般的には使用されません。

$from = parse_url($_SERVER['HTTP_REFERER']);
if ($from['host']!='xxx.com' && $from['host']!='www.xxx.com') {
    die('你丫在盗链');
}

Nginx の制限

これは、nginx 構成ファイルを変更することで実行できます。変更が完了したら、忘れずに nginx を再起動してください:

// 这里指定需要防盗链的资源,如gif/jpg等
location ~* \.(gif|jpg|png|jpeg)$ {
    // 设置资源的过期时间
    expires 30d;
    // 设置合法的引用页,也就是防盗链的白名单;
    // none blocked保证用户在新页面打开时依然能够打开,如果不希望用户能够保存删掉这两项
    valid_referers none blocked *.hugao8.com *.baidu.com *.google.com;
    // 对于非法的引用页,可以重写图片,也可以直接返回403或404页面
    if ($invalid_referer) {
        rewrite ^/http://www.it300.com/static/images/404.jpg;
        #return 404;
    }
}

リファラーポリシー

Referer 首部包含了当前请求页面的来源页面的地址,即表示当前页面是通过此来源页面里的链接进入的。服务端一般使用 Referer 首部识别访问来源,可能会以此进行统计分析、日志记录以及缓存优化等。

Referer属性出现在请求头中,也在请求头中被设置,但是在浏览器的安全策略里,该值无法被js所指定:

$.ajax({
        url: 'http://www.baidu.com',
        beforeSend(xhr) {
            // 在发送ajax请求前设置header头部
            xhr.setRequestHeader("Referer", "http://translate.google.com/");
            xhr.setRequestHeader("User-Agent", "stagefright/1.2 (Linux;Android 5.0)");
        },
        success(data) {
            console.log(data);
        },
        error(err) {
            console.log(err);
        }
});

然而浏览器会报错:

ホットリンクとは何ですか? PHP でリファラーを作成して反リーチング リソースをリクエストする方法 (例あり)

<meta>
<a>
</a><a></a>

防反盗链

前端JS不能在头部设置Referer字段,和跨域一样是因为浏览器的安全策略,那么同样的在服务端进行请求就不会有这些限制,我们在服务端请求时就可以自由的修改Referer字段。

我们通过简单的PHP例子来完成这个功能:

<?php $url = &#39;http://t11.baidu.com/it/u=3008889497,862090385&fm=77&#39;;
$refer = &#39;https://www.baidu.com&#39;;
$ch = curl_init();
//以url的形式 进行请求
curl_setopt($ch, CURLOPT_URL, $url);
//以文件流的形式 进行返回  不直接输出到浏览器
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//浏览器发起请求 超时设置
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
//伪造来源地址 
curl_setopt ($ch, CURLOPT_REFERER, $refer);
$file = curl_exec($ch);
curl_close($ch);
header(&#39;Content-Type: text/html&#39;);
// 对图片进行base64编码,然后返回给前端展示
$file = base64_encode($file);
echo "<img  src=&#39;data:image/jpeg;base64,{$file}&#39; / alt="ホットリンクとは何ですか? PHP でリファラーを作成して反リーチング リソースをリクエストする方法 (例あり)" >";
?>

我们第一次请求注释了伪造来源地址这一行,第二次请求不注释这一行,这样可以验证执行结果:
ホットリンクとは何ですか? PHP でリファラーを作成して反リーチング リソースをリクエストする方法 (例あり)

ホットリンクとは何ですか? PHP でリファラーを作成して反リーチング リソースをリクエストする方法 (例あり)

总结

盗链和反盗链是一个对立面,技术不断升级,最终的目标也是为了开放资源和保护知识产权。在互联网生态里,我们通过反盗链保护我们的利益,也使用防反盗链的这种方式来扩大我们的内容,无论站在哪一方,都需要做到知己知彼。

以上がホットリンクとは何ですか? PHP でリファラーを作成して反リーチング リソースをリクエストする方法 (例あり)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。