如何保护高流量网站的会员照片

时间:2010-08-24 14:34:02

标签: php security photo

在实际项目(约会网站)上,我有以下情况:

会员可以上传照片(主要个人资料)并创建相册并为其分配照片。现在,会员只能选择允许注册会员,高级会员或其收藏夹中的会员访问相册。

最简单的解决方案是隐藏相册,但如果有访问权限的人将src网址发布到照片,那么拥有该网址的每个人都可以访问该相册。

我看到flickr和facebook以一种好的方式保护它们,但是如何实现它而不需要多次查询数据库并复制用户auth / session。照片将存储在自己的服务器上(varnish / nginx)。

有没有人知道如何在高流量的情况下做到这一点并尽可能少地使用资源?

解决方案需要能够处理实际的20米成员和大约30米的照片。

3 个答案:

答案 0 :(得分:4)

嗯,有一种可能性就是运行Lighttpd's mod_secdownload之类的东西。

基本上你在配置部分设置了一个“秘密”字符串。然后,当您生成链接时,它不是链接到资源,而是时间链接(因此它仅对$x秒有效)。这样,用户需要再次访问页面(并因此再次通过访问控制),然后才允许查看该图像......

Apache有一个类似的模块:mod_auth_token ...

答案 1 :(得分:0)

最佳解决方案是将图像存储在服务器的Web可访问部分之外。然后,不是直接引用照片,而是引用指向图像的php页面,如下所示:

http://www.example.com/image.php?imageid=1234567

然后在您的PHP脚本中,您可以检查登录用户是否有权访问照片,如果是,则将图像流式传输给响应中的用户。

答案 2 :(得分:0)

作为一个想法...

您可以创建一个映射表,根据收藏夹,朋友等“准备”对用户 - >照片的访问权限。

然后根据这些权限返回图像,但每个用户缓存。这样可以降低服务器的压力,但由于缓存超时而导致应用限制会有一些延迟。