作为一名摄影师,我有自己的网站,有一个投资组合等。我还为用户提供了一个登录系统,我可以让他们访问自己的私有图像(它显示放在特定文件夹中的所有图像 - 我为每个用户手动执行此操作)。
当用户登录并查看他的私人图片时,他会注意到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编程了我的网站。
答案 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所描述的那样提供文件。