将临时/机器生成的密码作为明文存储在数据库中会有多少安全问题?
我知道密码应该使用带盐的单向散列函数加密.对于用户提供的密码尤其如此,因为用户通常一遍又一遍地重复使用它们.如果数据库被盗,小偷可能能够访问第三方网站上的用户用户帐户,例如:公用事业账单,社交网络,甚至网上银行的潜力.
将临时/机器生成的"欢迎"或"重置"密码存储为数据库中的明文是多少问题?密码将通过电子邮件发送给用户,登录后必须更改.然后,他们提供的密码将被散列.
我问的原因是存在一些很好的属性来存储临时密码作为明文.例如,如果用户未收到"欢迎"或"重置"电子邮件,管理员可以快速查找其临时密码.
因为临时密码是机器生成的,如果数据库被盗,窃贼将无法访问用户登录的任何第三方网站.然而,小偷可以登录到生成临时密码的应用程序.
为这些密码分配一个小的"到期"将限制曝光,但总的来说,我只是想看看这种方法有多危险.
我正在尝试创建一个首先检查用户密码的例程,如果它是正确的,它将从不同的表返回一些值或更改一行中的某些值.
如果没有在PHP中处理两个查询,这是否可行?首先调用密码,检查其是否正确,然后允许用户更改名称.
这是一个使用电子邮件和密码获取用户行的示例.
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `get_user_info`(
IN in_Email VARCHAR(45),
IN in_Pass VARCHAR(45)
)
BEGIN
SELECT * FROM User WHERE Email = in_Email AND Pass = in_Pass;
END
Run Code Online (Sandbox Code Playgroud)
这就是我到目前为止所得到的:
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `change_pass`(
in_Email VARCHAR(45),
in_PassOld VARCHAR(45),
in_PassNew VARCHAR(45)
)
BEGIN
SET @PassOld = (SELECT Pass From User WHERE Email = in_Email);
IF(@PassOld = in_PassOld) THEN
UPDATE User SET Pass = in_PassNew WHERE Email = in_Email;
END IF;
ENDND IF;
END
Run Code Online (Sandbox Code Playgroud)
感谢您的帮助!
与使用salt相比,AES在将密码存储到数据库时不会更安全地保护密码.注意:不关心性能,只关心安全性.哪一个会更安全.此外,将加密密钥存储在另一个数据库服务器中的加密显然不是更好.
我已经使用express-generator 创建了一个骨架网站和一个可以使用的模板。我不知道在哪里存储敏感信息,例如 Data_config 密钥、JWT 密钥、连接 URI 等。有解决方法吗?
这是我当前的文件树。./bin/www 有主 server.js
我以前使用过dotenv包,但这是我第一次使用express-generator。我通过添加 .env 文件尝试了相同的过程,并通过 require('dotenv').config() 要求 dotenv,但它给了我一个错误。
hash ×2
mysql ×2
cryptography ×1
encryption ×1
if-statement ×1
javascript ×1
mongodb ×1
node.js ×1
passwords ×1
salt ×1
security ×1