gpt4 book ai didi

php - 公共(public)页面上的 ID 散列与加密

转载 作者:可可西里 更新时间:2023-11-01 00:48:43 25 4
gpt4 key购买 nike

我已经阅读了很多关于这个主题的 SO 帖子,但他们似乎认为它不重要而耸了耸肩,所以也许如果我给你我的真实世界的例子会影响答案。

管理联系人列表和发送电子邮件的系统,但允许收件人使用唯一的 url 取消订阅

由于这是一个公共(public)页面,因此仅增加 ID 并取消订阅其他用户将是微不足道的。

我不想为用户/联系人/列表的每个组合添加必须存储在数据库中的唯一哈希。

最好的方法是什么?以下一项是否可以接受?

a) 加密所有 ID 并在服务器端解密

b) 根据3个ID和salt在url中包含一个hash,然后在服务器端确认

最佳答案

据我了解你的问题和评论,你的要求是

  • 允许用户通过单击 1 次链接取消订阅
  • 不要在您的数据库中存储任何单独的 token

您将在您的服务器上执行由 http GET 请求触发的操作,例如

http://youremailsystem.tl/unsubscribe&user=12&contact=34&list=56

虽然您的建议 1) 加密增加了隐私的额外好处(URL 不会泄露使用哪些参数执行的操作),但数字 2) 是更简单的方法。

should use a MAC function to sign your URL parameters .输入将是您要签名的参数加上一个永远不会离开您的服务器的 key 。

$signature = hash_hmac('sha256', $url, $mysecretkey);
$url = $url . '&signature=' . $signature;

这使得签名成为您电子邮件中取消订阅 URL 的一部分。

http://youremailsystem.tl/unsubscribe&user=12&contact=34&list=56&signature=b1812e463a7

无论何时收到 GET 请求,您都可以验证参数是否未更改。

粗略的代码:

// extract sent signature from url:
$sent_signature = //substr($sent_url ...

// strip signature from URL:
$sent_url = //substr($sent_url ...

// repeat hashing:
$correct_signature = $signature = hash_hmac('sha256', $sent_url, $mysecretkey);

if( $sent_signature == $correct_signature ) {
// do the unsubscribe
}

请注意,任何 URL 都可以被重复调用,因此请确保您永远不会重复使用您的任何 ID,否则您将允许前用户在很久以后取消订阅现在拥有其 ID 的新用户。

关于php - 公共(public)页面上的 ID 散列与加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11984210/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com