生成随机的一次性URL

时间:2012-08-08 12:59:20

标签: php security url random hyperlink

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

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

我一直坚持如何生成一个完全(好的,好的,准的)随机URL。更重要的是:我如何确保在链接后将引用引导到正确的页面?每次发送随机网址时,是否必须创建包含投递箱的新页面?

感谢您提出如何解决这个问题的建议:)

4 个答案:

答案 0 :(得分:1)

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

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

如果你不想哈希,下面的代码片段可以帮助生成随机URL(但要确保如果已经使用了URL,则可以防止意外覆盖):

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

答案 1 :(得分:1)

我认为当你说你想要生成一个随机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验证字符串并在数据库中查找它。对于您的目的,这似乎是迄今为止最简单的方法。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

hash($previous) // is unique

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

相关问题