使用电子邮件中的链接安全删除数据库中的条

时间:2013-07-20 13:43:47

标签: php mysql security

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

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

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我能想到的两种方式是:

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

  2. 与上述相同,但不是将令牌存储在数据库中,而是使用message authentication code(例如HMAC)和密钥从记录ID计算。

  3. 在任何一种情况下,你的链接看起来都是这样的:

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

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

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