Php 激活器链接:哪种设计方式最好?
我使用的是PHP,我知道这个网站上有很多类似的问题。但我没有找到一个很好的精辟的解释,比如:Php 激活器链接:哪种设计方式最好?,php,security,Php,Security,我使用的是PHP,我知道这个网站上有很多类似的问题。但我没有找到一个很好的精辟的解释,比如: 激活器链接的约定 activators链接上的常见漏洞 现在,我认为我只有以下选项来设计一个好的激活器链接: 在users表中存储一个唯一的令牌,并使用两个参数来验证帐户激活:用户标识符和数据库中各自的令牌。可能是这样的: $user->token=bin2hex(openssl_随机_伪_字节(16)) hostname/accountConfirm?user=username&token=use
- 激活器链接的约定
- activators链接上的常见漏洞
$user->token=bin2hex(openssl_随机_伪_字节(16))代码>
hostname/accountConfirm?user=username&token=userUniqueToken
$secret='some_secret_string'代码>
$hashedToken=密码\u散列($secret.$user->email,密码\u默认值)代码>
hostname/accountConfirm?token=($hashedToken)
- 这些方法的优点和缺点是什么
- 如果有,还有什么好的解决方案
$email = $_GET['email'];
$expires = $_GET['expires'];
$userIP = $_GET['ip'];
$hmac = $_GET['hmac'];
$expectedHmac = hmac_function( $serverSecret, $email + $expires + $userIP);
if($expectedHmac != $hmac) {
log 'evil request';
throw 400 error;
}
//check user ip
//check expiry time
//proceed with registration
如果有人弄乱了IP、电子邮件地址或到期时间,HMAC将不匹配。我选择方法1,令牌与用户的私人信息完全无关。黑客无法根据其他信息破译唯一令牌。他们被迫使用暴力攻击。如果您的唯一字符串足够长,则需要相当长的时间才能断开。也可能用htaccess重写激活url。你可以向我解释为什么我需要使用反用户ip吗?你不需要。这将允许您检查注册请求是否来自与确认Click相同的ip是的,我理解这一部分,但这不会限制用户在这些不同的操作中使用相同的设备,或者我是否感到困惑??我不理解您最后的评论。
$email = $_GET['email'];
$expires = $_GET['expires'];
$userIP = $_GET['ip'];
$hmac = $_GET['hmac'];
$expectedHmac = hmac_function( $serverSecret, $email + $expires + $userIP);
if($expectedHmac != $hmac) {
log 'evil request';
throw 400 error;
}
//check user ip
//check expiry time
//proceed with registration