一次性密码下载

时间:2012-01-16 04:18:00

标签: php security passwords

实施一次性密码下载文件的最佳方法是什么?最初我考虑过使用PHP,为用户分配密码,并在登录时删除帐户。我会将帐户保存在一个文件中,因为我预计在任何给定时间都不会有超过少数有效用户。我是否需要跟踪会话,或者是否有一种简单的方法可以通过单个站点实现此目的?

哦,我不能使用外部网站,因为数据是敏感的,必须保存在本地,也不能下载任何新软件,因此仅限于HTML,JavaScript和PHP(我相信)。

3 个答案:

答案 0 :(得分:3)

几乎只是Ilmari Karonen和martinstoeckli的答案的组合,但更详细。

使用这种数据库表:

temp_passes

uuid  | createTime | expireTime | filename
------------------------------------------
123-4 | 1326735047 | 1327735047 | myDisk.iso

不知何故,您为用户生成UUID,并将其插入数据库。然后,在提供下载链接时,您可以像这样使用UUID:

http://example.com/download.php?id=123-4

或者,有一个密码字段,用户必须输入其ID,并将其提交给download.php。无论哪种方式:

  1. 根据数据库验证ID,确保它存在且尚未过期。
  2. 从数据库中删除ID,因此无法再次使用。
  3. 让PHP生成下载,可能使用readFile()
  4. 您可以选择在下载完成之前或之后删除ID,这取决于您。但是,如果它是一个大文件,您可能希望首先执行此操作,以便其他人不能使用相同的“密码”来同时进行多次下载。

答案 1 :(得分:2)

您可以编写一个简单的PHP脚本,根据服务器上存储的hash(在文件或数据库中)检查密码,如果匹配,则使用{{3}传递文件}。成功发送文件后,从列表中删除密码或以某种方式将其标记为已禁用。

(是的,我知道这个答案非常模糊和通用,但是,你的问题也是如此。如果你能澄清你不确定的是什么,我可能会给出更好的答案。 )

答案 2 :(得分:2)

听起来你想要提供一次性动作,而不是真正的登录。您可以创建UUID并使用它构建链接,例如:

http://www.example.com/action.php?act=129d1e24-16f1-11e1-99fe-66756e647a65

您必须将此UUID存储在服务器(数据库)上,以及用户可以下载哪个文件的信息。用户点击链接后,他只能下载此文件,下载完成后,从数据库中删除UUID。