在php上加密用户ID的最安全方法

时间:2018-09-27 14:16:28

标签: php security

我需要在公共URL上附加一个用户ID,我不是安全专家,我需要了解确保其安全的最佳方法。 我要对该id进行加密并将其附加到url,并在url调用的函数上对其进行解密,但是我必须是唯一可以解密它的人。 有什么建议吗?

2 个答案:

答案 0 :(得分:2)

如果您希望向用户提供一次性或唯一限时的唯一ID(我想这可能是某种电子邮件链接或其他某种形式?),则可以潜在地创建GUID或UUID并将其与用户相关联(也许通过数据库表),并具有一个字段来标记何时使用或过期。

GUID / UUID几乎可以保证是唯一的,而且不容易随机猜测。

答案 1 :(得分:0)

做到这一点的最佳方法是实施SSO机制(单点登录)。 用户将在第一个应用程序上输入密码,并使用安全链接访问第二个应用程序。

第一个应用程序生成一个用两个应用程序已知的私钥加密的公钥。 第二个应用程序生成的公共密钥,如果它与附加到URL的密钥匹配,则可以安全地记录用户。

这里是一个示例:

第一个应用程序将创建一个公共密钥:

$privateKey = `123azerty456`;
$publicKey = hash('sha512', 'user_id' . $privateKey);
$url = 'second_app.com/example.php?user_id=foo&key='.$publicKey;

第二个应用程序上的脚本将根据作为参数传递的user_id并使用相同的私钥自行计算密钥:

$privateKey = `123azerty456`;
$checkPublicKey = hash('sha512', $_GET['user_id'] . $privateKey);

if($checkPublicKey == $_GET['key']) {
    echo 'OK';
} else {
    echo 'UNAUTHORIZED';
}