我对 Apache 和身份验证的概念还不太熟悉。我正在为洪水模拟器创建前端,该模拟器提供代表模拟数据的图像。我想将这些图像的访问权限限制为仅那些知道该模拟密钥的人。这里唯一的功能是查看模拟,因此不需要完整的用户名和密码组合。
Apache 身份验证方法似乎需要用户名和密码或类似的东西。我真正想要的是当某人在主页上输入相应的密钥时,他们暂时被允许查看他们要求的内容。我不太清楚该怎么做,所以任何帮助我都非常感谢。
答案1
首先我要说的是,我认为这不是一个好主意;你想让共享秘密的知识(“模拟的关键“)一种能力;即一个秘密,它可以识别一个特定的数据集,而知道这个秘密就是有权访问数据集的证明。这是一种通过隐蔽性实现的安全性,随着时间的推移,你将很难控制对运行数据的访问:如果你认为知识已经传播开来,你就不能排除一些拥有秘密的人,而只能排除所有人。
但如果你坚持要这么做,那么你根本就不需要做任何聪明的事情:只需将秘密放入 URL 中即可。例如,假设你的数据集存储在 下http://sets.example.com/data/
,并且该目录不可列出。给定一组密钥为 b8ab010d69f6008384d39bd3c0efeb0c 的秘密,将它们存储在 下http://sets.example.com/data/b8ab010d69f6008384d39bd3c0efeb0c/
;给定一组具有不同密钥的秘密,将它们存储在相应不同的 URL 下。
如果您想要从主页重定向器(“在主页上输入相应密钥后,即可看到所请求的内容") 编写它变得微不足道:只需一行代码,输入任意键即可重定向到http://sets.example.com/data/THAT-KEY/
。无需检查“键”;如果输入了无效键,用户只会收到错误404 not found
。
编辑:使目录不可列出的最快方法是将长度设为零index.html
。但还有其他方法,正如 ioctl 所指出的那样。当我写这篇文章时,我意识到我所描述的正是 Michael Hampton 在上面对你的问题的(极其,也许过于)简洁但准确的评论中提到的。
答案2
无需 apache 你完全可以做到这一点。
您是否使用 php/.net/ruby/whatever 页面来提供图像?
如果需要,您可以使用 md5 生成的密钥(有一个 php 函数可以做到这一点) 从图像的 id 加上一个“salt”(也可以是他们的密码),以使您使用该 id 不那么明显(例如,如果 id 是 1,您可以将“flood”附加到它,然后制作 md5 密钥:$key = md5("1"."flood"))。
然后,您可以通过其他方式将链接发送给用户,例如电子邮件、内部网页、应用程序等。
例如 httttp://myflodpage.coom/images.php?floodimage=<\MD5HERE>
答案3
抱歉,我无意窃取 MadHatter 的回答。要使目录不可列出,请在虚拟主机条目中添加选项“-Indexes”(不带引号)。
<VirtualHost *:80>
服务器别名 domain.com
服务器管理员[电子邮件保护]
文档根目录 /DocumentRoot
期权-指数其他选项1 其他选项2 等等。
<\虚拟主机>