限制对私人图像的访问
Restrict access to private images
作为一名摄影师,我有自己的网站,里面有一个作品集等等。我还有一个用户登录系统,在那里我允许他们访问自己的私人图像(它显示放置在特定文件夹中的所有图像——我为每个用户手动执行此操作)。
当用户登录并看到他的私人图像时,他会注意到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所描述的文件。
- 如何在PHP中使用url保护我的图像和文件夹免受直接访问
- 将图像数组访问到动态表中
- 访问rails 3.2中javascript中的图像
- Pinterest 扩展如何存储(临时)网页中的图像,然后在 iframe 中访问它们
- 如何从 HTML 或 Javascript for Windows Phone 访问图像文件
- 在指令内加载后访问子元素图像
- JS函数不访问所有数组图像
- 访问标记图标的图像数组元素
- 限制对私人图像的访问
- 如何访问图像取决于通知类型
- 按钮单击循环访问图像
- 从Facebook页面访问图像共享中的喜欢数
- HTML5 / Javascript - 使预加载的图像 DOM 可访问
- 如何使用 javascript 访问和修改 HTML 页面中的图像
- 为什么这个图像访问加载错误在承诺脚本小提琴上
- 无法访问上传的图像 - 流星网格FS
- gruntjs - 从javascript访问Rev(ed)图像
- 使用GWT,如何加载图像和访问图像属性和http状态代码
- 图像访问监控
- 响应中的图像访问头