限制访问我网站上的图像,除非通过我自己的htmls

2024-05-18 05:14:28 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的网站上,我以一种简单的方式存储用户图片,例如: “image/user_1.jpg”。在

我不希望访问者仅仅通过尝试用户用户名就可以在我的服务器上查看图像。(例如:www.mydomain.com/images/user_2.jpg, www.mydomain.com/images/user_3.jpg,以此类推…)

到目前为止,我想到了三个解决方案:

  1. 我试着用.htaccess密码保护“images”文件夹。这在某种程度上帮助了我,但是一些图片开始在我的htmls上弹出用户名和密码请求(而令人惊讶的是,有些图片没有),所以这似乎是一个不可预测的方法。

  2. 我可以开始把我的用户名转换成md5散列和一些盐。这些图像将命名为:/image/user_e4d909c290d0fb1ca068ffaddf22cbd0.jpg。我不喜欢这个解决方案。它使文件系统变得非常复杂。

  3. 或者我可以使用PHP的readfile()函数,或者在Perl或Python中使用类似的函数。例如,我可以通过一个md5字符串传递一个密码,以验证访问者是否是有权访问该图像的loggedin用户。

我倾向于选择3,但是从Perl或Python的角度(假设它们比PHP快)。不过,我想看看关于这件事的其他想法。也许有一个简单的方法?在

基本上我只想确保没有人可以从我的网站上查看图片,除非图片是从我网站上托管的htmls中直接调用的。在

非常感谢

哈鲁克


Tags: 用户图像imagecom网站www图片解决方案
3条回答

您选择的任何确定请求源的方法都只与用户浏览器发送的HTTP\u REFERER信息一样可靠,而这并不十分可靠。要求身份验证是保护内容的唯一好方法。在

方法1不可行,因为它将在请求的每个映像上请求用户名和密码。由于缓存问题,您可能得到了一些图像的提示,而不是其他图像的提示。在

方法2看起来最吸引我,因为它是最少占用处理器的,但是只有通过md5函数传递的用户id,文件名仍然很容易猜出来。您应该使用md5('my secret string'.$user\u id)来获得更好的解决方案。在

为什么要通过Perl或Python选择#3?PHP的速度有什么问题?事实上,如果你用这种方式来保护你的图片,你应该把它们移到你的webroot之上,这样它们就只能通过你的脚本访问了,脚本首先检查用户是否通过了身份验证,然后通过读取和输出来传递头像。或者,您可以使用htaccess文件来保护目录deny from all。在

另外,您应该通过PHP或via .htaccess来获得HTTP\u REFERER安全性。在

祝你好运!在

您可以通过htaccess查找“热链接预防”,我认为这应该是您所需保护类型的简单解决方案。然而,这不是傻瓜证明,谁将真正想得到这些图像将找到一个工作,通过伪造推荐人。在

http://altlab.com/htaccess_tutorial.html

相关问题 更多 >