限制对私有图像的访问

时间:2016-04-03 15:04:47

标签: javascript php html restrictions

作为一名摄影师,我有自己的网站,有一个投资组合等。我还为用户提供了一个登录系统,我可以让他们访问自己的私有图像(它显示放在特定文件夹中的所有图像 - 我为每个用户手动执行此操作)。

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

通过简单的猜测,他就能够找到其他用户的私人图像。当然,这违背了在我的网站上拥有私人图像的目的,所以我必须找到解决方法。

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

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

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

我该怎么办?我想一个选项是随机调用文件夹,例如: " Charles661846Xkdfdsnf34590u&#34 ;.这很难猜到,但我对安全性不太确定(如果还有其他方法可以访问root?)。

我看过Deny direct access to all .php files except index.php,但这不是我想要的。

在这种情况下我该怎么办?

我已经用php,html和一些javascript编程了我的网站。

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:1)

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

您还可以将所有用户文件夹置于http://example.com/storage/A97LD34B2之类的结构中,并确保storage文件夹中包含.htaccess文件:

Options All -Indexes

这就是纯文本文件中的所有内容。 当然,这假设您有一个Apache Web服务器(到目前为止最常见,特别是对于共享主机帐户。)此文件会阻止Snoopy先生导航到http://example.com/storage并看到文件列表。

这是两个S.O.这些问题概述了如何构建受密码保护的仅限成员的系统:

Login into a website and get html from a page

PHP - Secure member-only pages with a login system

请注意,每个文件夹都包含一个index.php文件,可以像jeroen所描述的那样提供文件。