[英]how to create a form that adds an entry to a database and email a link to that entry
[英]securely delete entry from database with link in email
有什么安全的方法可以从mysql数据库中删除带有电子邮件链接的条目? 我有一种情况,可以由站点上的登录用户创建条目。 然后,他或她将收到一封电子邮件,说明已使用他们的帐户创建了一个条目,但是如果该条目以后似乎是不需要的条目,则他或她可以使用链接删除该条目。 就像是:
domain.com/index.php?task=delete&id=1
有哪些安全的方法可以做到这一点? 我可以想象向URL添加某种安全令牌,但是我将如何生成和验证整个请求?
我只是让您的数据库使用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
我可以想到两种方法:
存储随机的“访问令牌”作为数据库条目的一部分。 令牌应至少具有64位的熵。 在删除链接中包含令牌,并拒绝任何使用错误令牌的删除尝试。
无论哪种情况,您的链接都会看起来像这样:
http://domain.com/index.php?task=delete&id=1&token=d7a8fbb307d78094
第二种方法的优点之一是,除了节省存储空间之外,还可以为不同的操作使用不同的令牌,只需将操作包括在计算MAC的“消息”中即可。 例如,上面的令牌可能是针对消息“ delete 1
”计算的,而“ edit 1
”将具有完全不同的MAC。
在PHP中,可以使用hash_hmac()
计算MAC。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.