本问题已经有最佳答案,请猛点这里访问。
我有两个表:
Userlogindetails(用户名,密码)
用户详细信息(电子邮件,用户名*)
-大胆为PK,星号为FK
我正在尝试使用sql语句来制作一个忘记密码的PHP页面。
用户将输入其电子邮件地址,并且sql语句将在Userdetails中检查电子邮件是否正确。
然后,Userdetails中的用户名将与Userlogindetails匹配以找到密码。
我需要两个陈述吗?
谢谢
首先,您需要摆脱"与Userlogindetails匹配的`以找到密码"。除非要建立密码库,否则切勿存储密码。
如果用户和他们的登录名之间存在一对一的关系(由于这里没有其他字段,所以似乎存在这种关系),为什么不简单地拥有一个表呢?
@GolezTrol存储密码是典型的做法。但是,如果您的意思是永远不要存储纯文本/未加密的密码,那我会同意的。密码应始终受某种形式的哈希/加密存储。
@MikeBrant散列,不加密。两者之间有很大差异。加密意味着您可以对其进行解密。除了试图找到匹配的(不一定是您的)密码外,没有任何其他事情。您不应该存储密码,无论是否加密。只需存储一个散列,让用户忘记密码就可以设置一个新密码。
是的Adobe最近刚刚被烧毁,因为他们使用了加密功能,而不是对slashdot.org/story/13/11/05/1655225/
否(您不需要2条语句),可以使用SQL JOIN完成此操作,例如
SELECT b.pass FROM
userdetails a
LEFT JOIN
userlogindetails b
ON a.username = b.username
WHERE a.email =
SQL联接:
http://www.w3schools.com/sql/sql_join.asp
正如其他人指出的那样,您不应在数据库中存储密码。 根据您的特定安全需求,您需要确定这是否是一个好主意。 此处讨论了用于存储的密码+盐哈希算法:
https://www.owasp.org/index.php/Password_Storage_Cheat_Sheet