生成随机的一次性网址


generating random, single use URLs

我正在创建一个非常简单的应用程序,它允许(潜在员工的)推荐人上传他们自己的推荐信。以下是它的工作原理:

  • 申请人提交推荐人电子邮件
  • 引用会收到一封自动生成的电子邮件,其中包含唯一的 URL(出于安全原因)
  • 参考链接,回答安全问题(如果他希望多次访问该网站)
  • 上传信

我被困在如何生成一个完全(好吧,好吧,准会做)随机 URL 上。更重要的是:如何确保以下链接会将引用定向到正确的页面?我是否必须在每次发送随机 URL 时创建一个包含投递框的新页面?

感谢您对如何进行此:)的任何建议

您可以尝试使用哈希算法,该算法从文件内容生成唯一式校验和。通常(例如md5())原始内容中的一个字节更改会导致完全不同的哈希。(注意:md5 存在一些冲突漏洞。

如果您使用哈希的文件名存储上传的文件,您将能够在以后检索它,但对于更复杂的系统,应该设置一个数据库,在随机 URL 和存储的内容之间建立关系。

如果您不想进行哈希处理,下面的代码片段可以帮助生成随机 URL(但请确保如果 URL 已被使用,则可以防止意外覆盖):

md5( sha1( time() + rand(0, time()) ) );

我认为当你说你想生成一个随机 URL 时,你本质上是在要求生成一个随机字符串。 这可能非常简单;下面是一些伪代码:

for i = 1 to stringLength
    randomString[i] = floor(random() * 26) + 'a'
end

换句话说,生成一个介于 0 和 25 之间的随机数,并将其添加到字符"a"的 ASCII 值中。 这将生成一个随机的小写字母字符串,我认为这应该足以满足您的任务。 在 PHP 中,您将使用 rand 函数。 建议使用 srand 函数为随机数生成器设定当前时间的种子,如给定链接末尾的示例所示。

至于第二部分;我建议你简化事情;与其生成带有随机URL的实际页面,不如简单地将随机字符串传递到查询字符串中,例如:

www.mydomain.com/uploadReference.php?id=xxxxxxx

其中 xxxxxxx 是您的随机字符串。 然后,您可以使用 PHP 验证字符串并在数据库中查找它。 就您的目的而言,这似乎是迄今为止最简单的方法。

您可以根据

当前时间戳的某种形式的哈希或引用的唯一凭据(例如用户名或其他内容)创建一个唯一的字符串。然后,您可以为 Dropbox 创建一个页面,该页面将接受 URL 中的唯一字符串,以用于页面上的脚本,该脚本将检索数据库中该字符串映射的相关数据。

您还可以创建数字和字符的随机排列,以便

hash($previous) // is unique

基本思想是"哈希"函数仅依赖于前一个值,从而创建一个新的唯一值。例如,"0"->"1","1"->"2","9"->"a","z"->"10","z0"->"11"。这样的算法相对容易设计