php-在新闻简报取消订阅链接中使用UUID,是否足够安全?

问题描述 投票:1回答:1

我正在研究php新闻稿脚本。我有一个MySQL订户表,其中为每个用户分配了一个UUID,想知道在退订链接中使用它是否足够安全。

我通过将href属性与与用户电子邮件匹配的queryUUID一起替换:

// Get UUID based on submitted email

$link = "href='https://example.com/unsubscribe.php?id=$uuid'>unsubscribe</a>)";

$html_message = file_get_contents('welcome_template.html');
$html_message = str_replace('href="">unsubscribe</a>', $link, $html_message);

// Headers and stuff

mail($email, $respond_subject, $html_message, $headers, '[email protected]');

通过足够安全我的意思是,如果这被认为是不正确的做法,并且在某些查询后预测UUID是否“容易”。

This answer类似问题指出

更简单的方法是将特定长度(例如30个字符)的随机字符串存储在表中,并对该字段具有唯一约束。

UUID是有效的随机字符串吗?

php mysql uuid
1个回答
0
投票

可预测性取决于您使用的UUID版本:

  1. 如果他们大约在同一时间在同一台计算机上生成样本,则很容易预测。
  2. 如果他们大约在同一时间在同一台计算机上生成样本,则很容易预测。
  3. 如果发布名称空间UUID,则非常容易预测
  4. 完全无法预测
  5. 如果发布名称空间UUID,则非常容易预测

MySQL的UUID()函数生成V1 UUID,但是如果需要,还有其他生成器来获取其他版本。

但是,在您的特定用例中,存在可发现性的其他问题。如果我想从新闻通讯中退订另一个用户,那么我要做的第一件事就是在用户界面的其他部分四处看看,看看是否公开了目标的UUID,电子邮件地址或您选择的其他任何键,然后可预测性无关紧要。

这就是为什么许多这样的系统不费心地保护此表面,而是向未订阅用户发送确认电子邮件的链接,该链接带有“单击确认”或“单击撤消”的链接,具体取决于您认为攻击或错误将是合法请求。并且[[that链接应包含为该特定的取消订阅请求生成的随机,唯一标识符,因此攻击者没有希望猜测它。

© www.soinside.com 2019 - 2024. All rights reserved.