【发布时间】:2011-11-28 02:25:44
【问题描述】:
我希望人们可以在有限的时间内访问图像。 例如,他们为 x.jpg 付费并且他们可以访问它,直到我决定他们 没有更多的权限下载它。
注意:存储 x.jpg 的“图像”服务器独立于“www”服务器,因此系统 可以轻松扩展。 (两台服务器不共享数据,db访问等等……)
目前我发现的最佳解决方案是这个:
在 www 服务器上,我生成一个包含两个参数的加密字符串: “文件名”和“expiration_stmp”。我将此加密字符串传递给图像服务器上的脚本 解密它,检查过期stmp是否不是过去,如果一切正常, 读取磁盘上的文件,输出正确的header,输出图片二进制数据给客户端。
所以我在 www 服务器上有一个类似这样的链接:“img src=http://IMAGES.myserver.com/get.php?XJDKUJHKDJSHJKDHJKHJKDJKDJKD” 其中 "XJDKUJHKDJSHJKDHJKHJKDJKDJKD" 解密时将提取到 filename=x.jpg,expiration_stmp=132920302030 并且图像服务器上的 get.php 将包含类似 header('Content-type...blablabl');读取文件(x.jpg).....
我要解决的问题是,在我生成加密字符串 XJDKUJHKDJSHJKDHJKHJKDJKDJKD 的时候, 我不知道expiration_stmp,因为管理员可以在未来的任何时间(从1分钟到5天)删除访问权限。 因此,当管理面板中的管理员删除该特定用户的文件读取权限时,必须拒绝该用户访问 到文件中。
为了解决这个问题,我想通过强制刷新页面每小时重新生成包含链接的页面,以生成包含新的 expire_stmps 的新加密字符串,最长有效时间为 1 小时。所以链接“img src=http://images.myserver.com/get.php?XJDKUJHKDJSHJKDHJKHJKDJKDJKD”只有1小时有效,所以当管理员取消用户的访问权限时,我只是拒绝重新生成一个新的加密字符串,以便用户在最后生成的 expire_stmp 过期(最多 1 小时)后无法再访问该文件。
目前这是我找到的最佳解决方案....我很想听听任何想法或更好的方法来处理这种情况?
谢谢
【问题讨论】:
-
什么可以阻止人们将图像保存到他们的硬盘上?
-
我不明白没有数据库这怎么可能。我也不同意您的说法,即使用数据库会使它无法扩展。如果管理员想要撤销权限,他必须在某处更改一些数据,如果不是 db 行,有什么要更改的?
-
确定他们可以保存图片,但是如果他们认为以后可以访问图片,很多人不会保存图片.....所以当他们发现他们被拒绝访问图片页面时,如果他们试图通过链接访问图像,他们将无法这样做
-
我猜 google 无法扩展,因为它使用会话和数据库,除了讽刺之外,您需要存储所有适合数据库的用户凭据和访问时间。
-
我(尝试)解释的是图像服务器和 www 服务器不共享“用户凭据”。两台服务器将仅共享密钥以加密/解密从一台服务器传递到另一台的加密字符串
标签: php security scalability download