使用电子邮件中的链接从mysql数据库中删除条目有哪些安全方法?我有一个案例,可以由站点上的登录用户创建一个条目。然后,他或她将收到一封电子邮件,表明已使用其帐户创建了条目,但如果以后该条目似乎是不受欢迎的条目,则他或她可以删除带有链接的条目。类似的东西:
domain.com/index.php?task=delete&id=1
有哪些安全方法可以做到这一点?我可以想象在URL中添加某种安全令牌,但我如何生成并验证整个请求呢?
答案 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)
我能想到的两种方式是:
将随机“访问令牌”存储为数据库条目的一部分。令牌应具有至少64位的熵。在删除链接中包含令牌,并拒绝任何具有错误令牌的删除尝试。
与上述相同,但不是将令牌存储在数据库中,而是使用message authentication code(例如HMAC)和密钥从记录ID计算。
在任何一种情况下,你的链接看起来都是这样的:
http://domain.com/index.php?task=delete&id=1&token=d7a8fbb307d78094
除了节省存储空间之外,第二种方法的一个优点是,只需将动作包含在计算MAC的“消息”中,就可以为不同的动作设置不同的令牌。例如,可能会针对消息“delete 1
”计算上述令牌,而“edit 1
”将具有完全不同的MAC。
在PHP中,您可以使用hash_hmac()
来计算MAC。