【发布时间】:2011-02-13 06:32:48
【问题描述】:
我正在寻找保护我的产品图片的方法,但我不知道是否有比我已经找到的更好的方法:禁用右键单击,在图片和水印前使用透明图片。显然它们都不是完美的,但我很好奇是否有人想出了更好的解决方案。
还有任何 Rails 插件可以帮助解决这个问题吗?
谢谢
【问题讨论】:
标签: javascript jquery ruby-on-rails image
我正在寻找保护我的产品图片的方法,但我不知道是否有比我已经找到的更好的方法:禁用右键单击,在图片和水印前使用透明图片。显然它们都不是完美的,但我很好奇是否有人想出了更好的解决方案。
还有任何 Rails 插件可以帮助解决这个问题吗?
谢谢
【问题讨论】:
标签: javascript jquery ruby-on-rails image
你根本无法做到这一点,那只是烟雾。
当您在网站中使用图片时,它们会被下载到客户端并可以在缓存中找到,即使您试图阻止用户右键单击并保存。
他们甚至可以查看您的 html/css/javascript 找到您图片的位置并将其放在他们的地址栏中。
【讨论】:
我真的,真的很讨厌阻止鼠标点击。它让我想起了九十年代,当您单击鼠标右键时,您会收到禁止复制该网站的消息;)。
您无法保护您的图片。对我来说,最好的方法就是放一些版权信息,仅此而已。
【讨论】:
您无法阻止人们在互联网上捏图片,所以不要浪费时间尝试。而是在图像下方使用措辞强硬的版权信息的组合,并且仅在服务器上存储低分辨率文件。
对于我在 Rails 中构建的摄影网站,在生成一系列较小的缩略图后,我使用 Paperclip 将原始高分辨率照片丢弃。将其与图像一角的水印结合起来,您应该有足够的能力让窃取高质量的图像变得很痛苦,同时又不会给用户带来不便。
坦率地说,如果我要访问您的网站并且您禁用了右键单击,我会在几秒钟内消失。
【讨论】:
了解商业图片供应商(如 iStockphoto.com)如何保护他们的图片,看看是否符合您的需求。
【讨论】:
我一直在寻找类似的东西,但是是随机图像。我没有找到任何东西,所以我想我会在这里做出贡献。
我的最后一个解决方案是使用签名,可以在这里应用,尽管我在底部也包含了一些修改。
我们应该区分(至少)两件事:
A.防止有人在浏览器中保存图片。
B.防止有人编写脚本自动翻录您的所有图像。
几乎不可能,也不是你想要的。想象一个网站,当您尝试按照您的预期使用方式使用您的浏览器时,它会给您带来麻烦。没错,你会不高兴。有人想要保存图片有完全正当的理由,最基本和最讨人喜欢的理由就是将其用作电脑或手机上的壁纸。
最好的解决方案是添加水印。这样一来,人们就会被提醒图像的来源,并且他们仍然可以将它们用于私人事务。
我认为这条一般规则适用于互联网:如果您不希望它在您的控制之外传播并且您获得信用:不要将它放到网上。
这是一个不太好的场景。我曾经做过的使翻录图像更难的最基本的事情是 a.使用不可预知的 url 到图像和 b。在您的服务器上创建一个脚本,调用该脚本时将从您的文件系统中获取图像,然后输出该图像。例如:http://example.com/some_image.php 代码真的很简单:
<?php
$name = './img/ok.png';
$fp = fopen($name, 'rb');
header("Content-Type: image/png");
header("Content-Length: " . filesize($name));
fpassthru($fp);
所以我所做的是我创建了一个类似上面的脚本,但在那里添加了一个计时选项,以便在假设 10 秒内调用它(从同一个会话)两次将返回相同的图像。这样,自动化脚本每 10 秒只能运行 1 张图像。此外,您可以使 url 包含某种时间戳哈希:
http://example.com/some_image_$(md5(Time.now + "secret")_Time.now).png 例如:
`http://example.com/some_image_aihfio1n...oi12nof_1396723820.png
检查是否允许获取图像的方法是:
您获取请求的文件名,去掉“some_image”,然后去掉 md5 哈希。然后检查给定时间('1396723820')是否在现在和 10 分钟内(允许波动)。然后检查该时间戳 + 'secret' 的哈希是否正确。
您可以将其视为有时在数字通信中使用的签名,虽然非常基本且不是很强大或其他任何东西。
对您的生产图像使用这种方法可能是这样的:
http://example.com/some_image$(md5($image_id, "secret",$timestamp))_$image_id_$timestamp.png
$image_id 这是您图像的某种静态标识符(文件名、数据库中产品的 ID 等)。
如果我认为这使预测文件路径变得更加困难的假设不正确,请任何人纠正我。最后,创建加密模式的第一条规则是“不要这样做”。第二个也是。但这是一个相当无辜的玩弄。
【讨论】: