我想生成一个安全的一键访问类型的URL,类似于下面的示例.我将使用PHP但这是无关紧要的,因为我只是想了解基本概念.一些答案建议使用GUID,但我认为这不会给我一个绝对独特,安全的URL,如下所示.
# Google Calendar
3qq6jlu04ptlhmb9fencsu5t2k
# Private
3qq6jlu04ptlhmb9fencsu5t2k
# Private 'token'
163a0afe7fkb1ba2acd04c11ef0eefe8
# LogMeIn
# 1024 bit - 128 Character URL
72oxuj0fzefqo3fu04xjtvmd0adj2948rfh7g5by4forkwcy7t651z7hcb6kjjgqkxmvmfqpyrcfy15z1fto8ewcxstjc6avicag7d5qnoimsm19kb9kgi9i7v6z01d5
Run Code Online (Sandbox Code Playgroud)
我倾向于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,或该代码在这里:
<?php
function guid(){
if (function_exists('com_create_guid')){
return com_create_guid();
}else{
mt_srand((double)microtime()*10000);//optional for php 4.2.0 and up.
$charid = strtoupper(md5(uniqid(rand(), true)));
$hyphen = chr(45);// "-"
$uuid = chr(123)// "{"
.substr($charid, 0, 8).$hyphen
.substr($charid, 8, 4).$hyphen
.substr($charid,12, 4).$hyphen
.substr($charid,16, 4).$hyphen
.substr($charid,20,12)
.chr(125);// "}"
return $uuid;
}
}
echo guid();
?>
Run Code Online (Sandbox Code Playgroud)
尝试使用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));
Run Code Online (Sandbox Code Playgroud)
但是我必须注意,没有以这种方式生成的网址(无论哈希算法是什么)都是"安全的",很难猜测.
| 归档时间: |
|
| 查看次数: |
11837 次 |
| 最近记录: |