1

我正在为 express.js 和 postgresql db 编写网站的安全性。现在我一直在阅读有关加盐和散列的内容,并且我使用加密模块使用 pdkdf2 设置了代码,但我的问题是如何在数据库中构建帐户表。如果我要创建一个登录角色,该角色将具有 MD5 加密格式的密码,该密码将是从 salt n 哈希“过程”派生的密钥。这会不会是过度保护?

将有一个表如下:UID(来自登录角色的 ID)、SALT、HASH。还有登录角色。

因此,在尝试进行身份验证时,代码将尝试以该角色身份登录,首先通过获取关联的 UID,为提供的密码生成 salt n 哈希密码,并在数据库级别进行身份验证。

希望我有点道理..

       var usrSalt = crypto.randomBytes('128').toString('base64');
       //text , salt ,iterations , keylen , callback
       crypto.pbkdf2(usr, usrSalt, 10000, 512, function (err, derivedKey) {
           if (err) { console.log(err); }
           else {
               usr = derivedKey;
               next();
           }
       });

PS pgcrypto 模块在同样的场景下会不会更好,只需删除 node.js 上的代码。

4

2 回答 2

0

加盐和散列密码并不过分,如果您不能完全避免处理密码,这是您应该做的绝对最低限度。

很难弄清楚第二部分是什么意思,因为它被用于在数据库级别进行身份验证。您通常要么使用自己的用户名/密码进行应用程序级别的身份验证,要么在 PostgreSQL 中创建真实用户并让 PostgreSQL 通过在创建连接时简单地将他们的密码和用户名传递给 PostgreSQL 来对他们进行身份验证。

有一种中间方式,您可能正在尝试使用它。自己验证用户,然后使用SET SESSION AUTHORIZATION让您的 PostgreSQL 数据库会话“成为”该用户。这是一种特殊的方法,而不是我大部分时间都倾向于使用的方法。它主要由连接池程序使用。

也可以看看:

于 2014-01-14T00:31:52.680 回答
0

这个答案处于更高级别,而不是实际代码的低级别。

“保护过度”与您的项目有关。10000 次迭代将花费一些时间,而 MD5 将提供一定程度的加密。两者都可能适合您的项目,并且与其他方面(速度、功能等)相比,必须优先考虑。

笼统地说,某种程度的良好安全实践将保护一定比例的用户数据,而对于坚定的攻击者,其他比例可能“总是”受到损害。

的选择pgcrypto是相似的。如果它与您计划编写的代码一样足够(它实际上比您当前的代码经过更多测试),那么它的处理将在您的数据库服务器上。让它远离节点服务器好吗?易于维护?工作少?“更好”将与您的项目相关。

于 2014-01-13T18:10:19.790 回答