限制对私人图像的访问

Restrict access to private images

本文关键字:图像 访问      更新时间:2023-11-19

作为一名摄影师,我有自己的网站,里面有一个作品集等等。我还有一个用户登录系统,在那里我允许他们访问自己的私人图像(它显示放置在特定文件夹中的所有图像——我为每个用户手动执行此操作)。

当用户登录并看到他的私人图像时,他会注意到URL上写着以下内容(当他下载/点击它时):www.mywebsite.com/FOLDER_NAME/IMG_123.jpg

只需猜测一下,他就能找到其他用户的私人图片。当然,这违背了在我的网站上拥有私人图片的目的,所以我必须想办法解决这个问题。

目前,只有当用户的user_email(唯一)与userRow:匹配时,用户才能看到他的私人图像

if ($userRow['user_email'] == "email@hotmail.com")

我不太确定该搜索什么。限制访问图像对我来说不是一个成功的搜索查询。

我能做什么?我想一个选项是随机调用文件夹,例如:"Charles661846Xkdfdsnf34590u"。这很难猜测,但我对安全性不太确定(比如是否有其他方法可以访问根目录?)。

我已经研究了拒绝直接访问除index.php之外的所有.php文件,但这并不是我想要的。

这种情况下我该怎么办?

我已经用php、html和一些javascript对我的网站进行了编程。

如果您需要将对文件的访问限制为仅限登录用户,则应将所有文件从web根目录中移动,并将它们放在无法直接通过web服务器访问的位置。

然后,在用户通过php进行身份验证后,您将提供这些文件。例如,请参阅php手册readfile()页面上的第一个示例。

因此,当用户登录时,您将用户ID存储在会话变量中,并在文件服务脚本的顶部检查ID是否正确/是否允许访问该特定文件。

除了Jeroen所说的,您还正确地确定了文件夹名称可能是弱点,并且应该很难/不可能猜测。不需要以用户的名字命名文件夹;您可以创建一个随机的8、12或16个字符的字母数字字符串,并将其作为$userRow['folder_name']存储在userRow中。

您还可以将所有用户文件夹放在类似http://example.com/storage/A97LD34B2的结构下,并确保storage文件夹有一个.htaccess文件,其中包含:

Options All -Indexes

这就是你在纯文本文件中所需要的全部内容当然,这是假设你有一个Apache web服务器(到目前为止是最常见的,尤其是对于共享托管帐户。)这个文件会阻止Snoopy先生导航到http://example.com/storage并查看文件列表。

以下是两个S.O.问题,概述了如何构建一个受密码保护的会员专用系统:

登录到网站并从页面获取html

PHP-使用登录系统保护仅限会员的页面

请注意,每个文件夹都将包含一个index.php文件,该文件将提供jeroen所描述的文件。