ご存知のとおり、Web サイトの画像トラフィックは多くのネットワーク帯域幅を消費するため、画像の盗難を防ぐことが最優先事項です。ここでは、Baidu が画像のホットリンクを防止する原理を簡単に説明し、その後、PHP を介して画像を盗む方法を紹介します。「鬼よりも道は高ければ、防御と攻撃は常に開発を促進します。」お互いの。
まず、ホットリンクについて簡単に紹介します。Baidu Encyclopedia によると、「ホットリンクとは、サービス プロバイダー自体がサービスを提供しないコンテンツを指し、技術的手段を使用して他の有益なエンドユーザー インターフェイス (広告など) を回避します。 )他のサービス プロバイダーのサービス コンテンツを自社の Web サイトでエンド ユーザーに直接提供し、エンド ユーザーの閲覧率やクリックスルー率を騙します。一方、受益者はリソースを提供しないか、ほとんどリソースを提供しません。一方、実際のサービス プロバイダーは何も受け取りません。所得。"したがって、ここでの画像のホットリンクとは、画像を自分のサーバーに置かずに、Baidu の画像結果を自分のサーバーで引用することを意味し、サーバーの帯域幅が削減されます。
例: Baidu 画像の URL を指定します: http://c.hiphotos.baidu.com/image/w%3D210/sign=ed30880babec8a13141a50e1c7029157/d52a2834349b033be1a9503e17ce36d3d5 39bd35.jpg
合格したらブラウザで直接アクセスすると、以下に示すように実際の画像が取得されます。
ただし、自分のサーバー image/w%3D210/sign=ed30880babec8a13141a50e1c7029157/d52a2834349b033be1a9503e17ce36d3d539bd35.jpg" /> を使用してコンテンツを取得します。
すると、次の画像が得られます:
ここで、画像をリクエストすると、http リクエスト ヘッダーに Referer: フィールドがあり、Baidu 独自のサーバーではないことを示します。したがって、リクエストは正常に処理されません。ここでは、php の Curl 拡張機能を使用して http リクエストを偽造し、正しい画像を取得します。コードは次のとおりです:
<?php$url = 'http://c.hiphotos.baidu.com/image/w%3D210/sign=ed30880babec8a13141a50e1c7029157/d52a2834349b033be1a9503e17ce36d3d539bd35.jpg';//$_GET["url"];$dir = pathinfo($url);$host = $dir['dirname'];$refer = $host.'/';$ch = curl_init($url);curl_setopt ($ch, CURLOPT_REFERER, $refer);curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);//Activation can modify the pagecurl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);$data = curl_exec($ch);curl_close($ch);header("Content-type: image/jpeg");print( $data );