我想生成一个安全的一键访问类型的URL,类似于下面的示例.我将使用PHP但这是无关紧要的,因为我只是想了解基本概念.一些答案建议使用GUID,但我认为这不会给我一个绝对独特,安全的URL,如下所示.
# Google Calendar 3qq6jlu04ptlhmb9fencsu5t2k # Private 3qq6jlu04ptlhmb9fencsu5t2k # Private 'token' 163a0afe7fkb1ba2acd04c11ef0eefe8 # LogMeIn # 1024 bit - 128 Character URL 72oxuj0fzefqo3fu04xjtvmd0adj2948rfh7g5by4forkwcy7t651z7hcb6kjjgqkxmvmfqpyrcfy15z1fto8ewcxstjc6avicag7d5qnoimsm19kb9kgi9i7v6z01d5
我倾向于128字符,1024位样式,因为它看起来非常安全.我想我可以制作四个MD5哈希并合并它们,但这真的有效吗?
对于像这样的网址,我有两个特定的意图,但我确信还有其他人可能会觉得这很有用.
1)即时登录用户的快捷方式/图标
2)一次性网址(密码恢复链接)
更新:
对于像单次使用URL这样的东西,我会使用已建议的GUID-esque appoach.确保链接的使用寿命短.
对于即时登录,没有真正安全的方法来拥有单个URL.
是的,你可以生成一个几乎无法猜测的URL,但这并不能给你带来超级安全性.如果您想记住用户,为什么不使用加密的身份验证cookie?
您提供的示例,Google日历不会仅通过网址登录您,您必须先在网址表示任何内容之前进行身份验证.
例如,点击我的Gmail中的谷歌日历给了我:
https://www.google.com/calendar/render?tab=mc&gsessionid=-LTeHrnKoeAbDcVaN68NHA
除非您首先通过身份验证,否则这无法帮助您访问我的帐户.
老帖子:
您可以使用com_create _guid在PHP中生成GUID 并使用它.
在Linux上,我认为你可以使用uuid_create,或该代码在这里:
尝试使用uniqid - 并且可能与md5哈希相结合,如示例中所示:
// no prefix // works only in PHP 5 and later versions $token = md5(uniqid()); // better, difficult to guess $better_token = md5(uniqid(rand(), true));
但是我必须注意,没有以这种方式生成的网址(无论哈希算法是什么)都是"安全的",很难猜测.