安全图像(gmail)

时间:2011-02-15 18:40:10

标签: html security image gmail

我想知道如何在我的网站上保证图像安全。我们有一个需要登录的网站,然后用户可以查看数千个不同的图像,这些图像都以其在数据库中的ID命名。

即使你需要登录以正确的方式查看图像......没有什么能阻止用户通过键入<website-director>/image-folder/11232.jpg或其他内容来浏览图像。

这不是世界末日,但绝对不理想。我看到要停止这个Facebook只是将图像命名为更复杂的东西+将它们存储在哈希文件夹中。

Gmail功能非常有趣,他们的图片代码如下所示:

<img src=/mail/?attid=0.1&disp=emb&view=att&th=12d7d49120a940e5>

我认为src属性必须包含对图像的引用?? ... gmail如何解决这个问题?

此时此更多用于教育目的,因为我认为此gmail方案可能对我们的实施而言过度。

感谢您的反馈意见, 安德鲁

3 个答案:

答案 0 :(得分:2)

  

我认为src属性必须包含对图像的引用?

GMail正在引用一张图片。它只是被动态拉动,可能是基于th=12d7d49120a940e5字符串。

尝试浏览http://mail.google.com/mail/?attid=0.1&disp=emb&view=att&th=12d7d49120a940e5

它不是直接通往服务器文件系统上的位置,而是使用动态脚本(图像甚至可以在数据库中,谁知道)。

答案 1 :(得分:1)

除了从您的webapp动态提供图像外,还可以使用webapp动态授权访问Web服务器将提供的静态资源 - 通常将文件放在Web服务器的某个位置有权访问但不映射到任何公共URI,然后使用类似X-Sendfile(lighttpd,Apache with mod_sendfile,其他),X-Accel-Redirect(nginx),X-Reproxy-File(Perlbal),使用FastCGI,您可以在FastCGI“授权方”角色而不是内容提供商中配置应用程序。

其中任何一个都可以让您检查授权的图像和用户的会话,并做出您需要的任何决定,而不会在将图像发送到客户端的整个过程中占用后端应用程序的过程。这并非普遍适用,但通常与后端应用程序的连接表示比与Web服务器的连接保留的资源要多得多,因此尽快释放它们是明智的。

答案 2 :(得分:0)

发出此GET请求后运行的代码:

/mail/?attid=0.1&disp=emb&view=att&th=12d7d49120a940e5

将图像输出到浏览器。某些内容不必以.jpg.png或任何以浏览器视为图像的结尾命名。这就是验证码算法能够根据id中的值提供不同图像的方式。例如,此链接:

http://www.google.com/recaptcha/api/image?c=03AHJ_VusfT0XgPXYUae-4RQX2qJ98iyf_N-LjX3sAwm2tv1cxWGe8pkNqGghQKBbRjM9wQpI1lFM-gJnK0Q8G3Nirwkec-nY8Jqtl9rwEvVZ2EoPlwZrmjkHT7SM32cCE8PLYXWMpEOZr5Uo6cIXz1mWFsz5Qad1iwA

提供此图片:

enter image description here

所以答案实际上就是像Facebook那样混淆你的图像名称/链接,这样人们就不会轻易猜到它们。