避免<img/>被下载的来源 - 是否可能?

时间:2012-06-21 10:01:07

标签: jquery html

我想在我的页面上添加一个翻书插件(例如http://www.turnjs.com/)。像这样的所有插件都使用原始的<img>标记,我可以在其中看到URL&amp;下载图像。我想避免这种情况(我不想让用户下载图片)为此,我开始想知道一些保护措施。

在这里,我需要一些提示,我该怎么做。

我在考虑动态生成整个页面。但是,如果我加载异步页面,我可以获取URL(例如,通过FireBug)

...或使用空的<img>标签,我会动态加载他们的内容?

3 个答案:

答案 0 :(得分:5)

作为一般规则,您作为网页资产提供的任何内容都无法获得保护。图像,CSS / JS文件,Flash SWF,你有什么。当您的浏览器加载页面时,将下载布局中的所有资源。

虽然这是静默地和幕后执行的,但事实仍然是这些文件已经存在于客户端的计算机中。那一点,没有阻止一个狡猾的用户获取你的文件(因为,由于浏览的唯一性质,他/她已经)。

答案 1 :(得分:2)

正如此处提到的所有人:用户将始终能够下载任何可用于其浏览器的资产 - 事实上,如果他们看到您的页面,他们就已经这样做了。

无论如何,您可以做的是阻止访问者通过使图像的URL无效来下载您已经第二次传送的图像。 这需要在您的服务器上编写一些脚本:

  1. 在投放HTML页面时,为每个要对页面的每个请求“保护”的图像创建一个唯一的标记。将其与图像的标识符一起存储在缓存(或数据库)中(如服务器上图像的本地路径或数据库中图像的ID)。不要将图片的“真实”网址放在HTML或JavaScript中,而应使用以下内容:<img src="http://yourdomain.com/images/#TOKEN" alt="protected image"><img src="http://yourdomain.com/images/imageHandler.jpg?requestID=#TOKEN" alt="protected image">

  2. 浏览器将尝试从img的src URL加载资源。如果您在服务器上收到该资源的请求,请立即提交映像并从缓存中删除该令牌。如果您在缓存中找不到令牌,则会提供错误页面,例如“此资源的下载令牌已被使用”

  3. 确保使用适当的缓存控制标头传递图像(请参阅:HTTP/1.1 Header Field Definitions for Cache Control)。这应该可以防止浏览器将图像存储到硬盘。 (请注意:浏览器总是会尝试为用户提供最佳性能,所以不要指望它 - 但由于这是一个必须尊重的标头,根据http标准,我的猜测是浏览器只会存储图像在记忆中。)

  4. 这样,只需复制<img>的src并尝试下载的用户就会进入错误页面。该网址已不再有效,因为他的浏览器之前已经使用它来下载图片。

    顺便说一句,这就是大多数文件共享和在线视频流服务保护其下载链接的方式。每个请求和资源只需一个令牌,一旦传递资源,就会删除令牌。如果没有令牌,则没有资源,并且不必显示资源的真实URL,实际上不需要任何“真实”URL。

    仍然:这是默默无闻的安全。但在80%的情况下,这将阻止用户下载您的图像。

答案 2 :(得分:0)

无论如何,所有图像都将通过浏览器下载。因此用户可以访问它。 如果你想限制它,可能你可以使用Flash进行某种加密(我没有使用闪存)。