1

有哪些安全方法可以通过电子邮件中的链接从 mysql 数据库中删除条目?我有一个案例,可以由网站上的登录用户创建条目。然后,他或她将收到一封电子邮件,说明已使用他们的帐户创建了一个条目,但如果它后来似乎是一个不受欢迎的条目,他或她可以使用链接删除该条目。就像是:

domain.com/index.php?task=delete&id=1

有哪些安全的方法可以做到这一点?我可以想象向 URL 添加某种安全令牌,但我将如何生成和验证整个请求?

4

2 回答 2

1

我会让你的数据库为你处理这个autoincrement 你也可以使用 uniqid:md5(uniqid(rand(), TRUE)); index.php:

for ($i=0;$i<10;$i++) {
    echo md5(uniqid(rand(), TRUE)) . "\n";
}

输出:

php index.php 
ba0d9aad1ff0ceadf4b25f101099b91e
b5a6db5e174b426061d3d3835a6fcaea
54be6d3a03e0590917ed20b097442e3a
6e208a61eae8cfd102d4a41decf0f64e
2cafac5402815af87e8299e5e67016bd
95e839097a566471c70fe357e5a101d2
c6908532bda6f926debdda754b02f931
aac7adf999dd4dd009f208b176ea90d0
1ed7779229e57b05adc088b375582cfb
e016a684564d5cdb89201ebab1038609

如果可能,将此输出保存到另一列或使用解码函数转换为实际 id

于 2013-07-20T13:48:30.257 回答
0

我能想到的两种方法是:

  1. 将随机“访问令牌”存储为数据库条目的一部分。令牌应具有至少 64 位的熵。在删除链接中包含令牌,并拒绝任何具有错误令牌的删除尝试。

  2. 与上面相同,但不是将令牌存储在数据库中,而是使用消息身份验证代码(例如HMAC)和密钥从记录 ID 计算它。

无论哪种情况,您的链接都将如下所示:

http://domain.com/index.php?task=delete&id=1&token=d7a8fbb307d78094

第二种方法的一个优点是,除了节省存储空间外,您只需将操作包含在您为其计算 MAC 的“消息”中,就可以为不同的操作提供不同的令牌。例如,上面的令牌可能是为消息“ delete 1”计算的,而“ edit 1”将具有完全不同的 MAC。

在 PHP 中,可以使用hash_hmac()MAC 来计算。

于 2013-07-20T21:36:44.070 回答