0

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

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

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

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

4

3 回答 3

5

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

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

于 2012-06-21T10:05:18.470 回答
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 加载资源。如果您在服务器上收到对该资源的请求,请立即交付图像并从缓存中删除令牌。如果您在缓存中找不到令牌,请提供一个错误页面,例如"Your download token for this resource has been used"

  3. 确保使用适当的缓存控制标头交付图像(请参阅:缓存控制的HTTP/1.1 标头字段定义)。这应该可以防止浏览器将图像存储到硬盘。(请注意:浏览器将始终尝试为其用户实现最佳性能,所以不要指望它 - 但由于根据 http 标准这是必须尊重的标题,我猜浏览器只会存储图像在记忆中。)

这样,简单地复制<img>src 并尝试下载的用户只会进入错误页面。该 url 不再有效,因为他的浏览器之前已经使用它来下载图像。

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

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

于 2012-06-21T11:51:34.240 回答
0

无论如何,所有图像都将通过浏览器下载。因此用户可以访问它。如果你想限制这一点,也许你可以使用带有某种加密的 Flash(我没有很好地使用 Flash)。

于 2012-06-21T10:08:40.997 回答