誰かがそれを作成する方法のチュートリアルまたはソースコードを提供してくれるかどうか疑問に思っていたので、人々が私のサイトの画像を盗んでフォーラムやサイトに埋め込んでいる場合、透かしが表示されますが、私のサイトで表示すると彼らは透かしになりませんか?
3 に答える
Piskvor は 100% 正しいですが、PHP でリファラーを取得する方法を追加したいと思います。
$_SERVER['HTTP_REFERER']
クライアントから送信された Referer ヘッダーを取得するために使用します。あなたのウェブサイトが「www.example.com」の場合、リファラーのドメイン名は常に「www.example.com」でなければなりません。
次に、ドメイン名を検証するために、 を使用parse_url()
して URL を配列に解析し、さまざまな部分を抽出しましょう。配列を返します。 this$url
と呼びましょう。ドメイン名を取得するには、 を使用します$url['host']
。これを自分のドメイン名と比較して、自分のドメインにあることを確認します。
完全な例:
$referrer = $_SERVER['HTTP_REFERER'];
$url = parse_url($referrer);
if($url['host'] == 'www.example.com')
{
// Is from www.example.com
}else{
// Is from other website
}
まず、HTTP へのちょっとした回り道
HTTP は、基本的に Web のコア プロトコルであり、ハイパーテキスト (Web ページ)、画像、およびその他のメディアの転送に使用されます。最初から、HTTP はステートレスになるように設計されていました。これは、とりわけ、画像のリクエストがページまたは別のページに「属している」かどうかを確認できないことを意味します。
HTTP には基本的に 2 つの回避策がありますが、どちらも 100% 信頼できるわけではありません: Cookie と Referer ヘッダーです。
Cookie を使用すると、ユーザーがページにアクセスしたときに Cookie を設定し、画像を提供するときにそれを確認できます。これにより、初めてページに入るときに同時実行の問題が発生する可能性があります。
を使用Referer
すると、ブラウザは画像のリクエストで、画像のロード元の URL を送信します。残念ながら、リファラーはユーザーまたはセキュリティ ソフトウェアによって簡単に変更または削除できます。
それがあなたにとって何を意味するか
Referer フィールドを使用することをお勧めします - 100% 信頼できるわけではありませんが、ほとんどの人はそれをいじることはありません。
スクリプト (PHP など) を使用して画像を提供する必要があります。
http://example.com/img.php?id=12345 - チェック用の擬似コード、ウォーターマーク自体用の PHP:
check if the image with given ID exists, else throw a 404 and end
check the referer - if it matches your site, just readfile() the relevant image and exit
if we're here, referer is wrong - you'll need the watermark:
// PHP code from now on
$original = imagecreatefromjpeg($original_image_path);
$watermark = imagecreatefromjpeg($watermark_image_path);
imagecopymerge ( $original, $watermark, 0,0,0,0, $watermark_width, $watermark_height, $opacity);
header('Content-Type: image/jpeg');
imagejpeg($original);
exit;
大きな画像の場合、Piskvor の回答はサーバー リソースに負担がかかりすぎます。また、クライアント キャッシュの影響により、待ち時間が不必要に増加する可能性もあります。
代わりに、参照の検出を .htaccess ファイルに実装して、参照内のドメイン名または空の参照のいずれかを含むすべてのリクエストが、PHP 処理なしで画像に直接送信されるようにします。それ以外の場合はホットリンクを意味するため、透かしスクリプトが提供されます。