【问题标题】:generating random, single use URLs生成随机的一次性 URL
【发布时间】:2012-08-05 14:16:18
【问题描述】:

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

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

我不知道如何生成一个完全(好的,好的,准会做的)随机 URL。更重要的是:我如何确保点击链接会将引用指向正确的页面?每次发送随机 URL 时,是否必须创建一个包含下拉框的新页面?

感谢您提供有关如何解决此问题的任何建议 :)

【问题讨论】:

  • 使用随机函数生成这些 URL,并将它们存储在您的数据库中,以确保人们重定向到正确的 URL。
  • 使用 PHP 的 uniqid 函数生成随机的字母数字字符串。无需散列随机字符串。
  • @Truth:使用 uniqid,有没有办法排除某些字符(例如 . )出现在随机字符串中?
  • 使用str_replace删除它们。

标签: php security url random hyperlink


【解决方案1】:

您可以尝试使用hash 算法,该算法会根据文件内容生成独特的校验和。通常(例如md5())原始内容中的一个字节更改会导致完全不同的哈希值。 (注意: md5 有一些collision vulnerabilities。)

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

如果您不想散列,下面的代码 sn-p 可以帮助生成随机 URL(但请确保如果 URL 已被使用,则防止意外覆盖):

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

【讨论】:

  • 不错,领先我 6 秒 +1 :)
  • 如果我错了,请原谅我,但我认为这并不能完全回答这个问题 - OP 声明文件是在 之后上传的,它们被随机分配 -生成的 URL,所以我认为他们不能散列文件。他所需要的只是申请人和参考之间的关联,以确保文件上传到正确的位置。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    我认为当你说你想生成一个随机 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 在数据库中查找它。就您的目的而言,这似乎是迄今为止最简单的方法。

    【讨论】:

      【解决方案4】:

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

      hash($previous) // is unique
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-03-17
        • 2012-02-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-27
        • 1970-01-01
        • 2014-12-12
        相关资源
        最近更新 更多