1

我想知道是否有人可以为我提供制作方法的教程或源代码,所以如果人们窃取我的网站图像并将它们嵌入他们的论坛或网站,它会显示一个水印,但如果他们在我的网站上查看它他们不会是水印吗?

4

3 回答 3

4

尽管 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
}
于 2010-08-21T13:52:43.693 回答
3

首先,小绕道进入 HTTP

HTTP 本质上是 Web 的核心协议——用于传输超文本(网页)、图像和其他媒体。从一开始,HTTP 就被设计为无状态的——除其他外,这意味着无法确定对图像的请求是否“属于”一个页面或另一个页面。

在 HTTP 中基本上有两种解决方法,但都不是 100% 可靠的:cookie 和 Referer 标头。

使用 cookie,您可以在用户访问您的页面时设置一个 cookie,然后在提供图像时检查它。这在第一次进入页面时可能会遇到并发问题。

使用Referer,浏览器向图像请求发送一个 URL,从该 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;
于 2010-08-21T07:01:05.130 回答
0

对于大图像,Piskvor 的答案在服务器资源上过于繁重。还可能存在客户端缓存影响,不必要地增加延迟。

相反,我会在 .htaccess 文件中实现引荐检测,以便在引荐中使用您的域名或空引荐的所有请求直接进入图像,无需 PHP 处理。任何其他情况都意味着热链接,因此将提供水印脚本。

于 2011-08-16T22:30:33.697 回答