node.js - 哈希然后存储token,需要多少成本?

标签 node.js mongodb security hash cryptography

我正在尝试创造一些安全的东西,但并不可怕。

我需要的是在我的数据库中找到一个用户,然后编辑该用户中的字段。 我目前执行此操作的方法是使用如下代码:

exports.buyItem = function(req, res, next) {
var token = req.body.token;
var playerID = req.body.playerID;
User.findOne({ token: SHA256(token)+playerID },
///implementation ( do something for that user)

说明: 当用户登录时,会创建一个随机生成的 token 。 然后 token 被发送回用户。 并且它也被散列并存储在数据库中(与玩家ID连接)

现在,每次我的用户向数据库发出请求时,他都会将 token +玩家ID发送到服务器,然后服务器会按照上面的代码进行验证。 (它检查哈希 token +playerID是否在数据库中)

现在,我的问题是:

  • 考虑到服务器会有大量流量,会计算 每次用户请求某些内容时的哈希值都会有问题吗?(SHA256 计算会破坏服务器吗?)
  • 您是否发现实现过程中存在任何其他问题?您对我应该采取哪些不同的做法有何建议?

我不想使用 cookie。

最佳答案

我认为使用异步哈希 API(允许您提供回调的 API)会更好,nodejs 中的加密提供了这一点。如果您使用同步(阻塞)API,您的 Nodejs 将无法在哈希期间执行任何其他操作。

作为引用,我的计算机中 10^7 sha256s 需要 38667 毫秒(使用 sync API)。 (每个哈希 3μs,或 259khash/s)

What if I made the user hash the token on his machine and then upload it along with his playerID? That way the server only has to do the lookup for the user.

如果你这样做,哈希根本不会 secret 提供。

我猜你想要散列的原因是在数据库泄露时保护用户免受黑客攻击。获得存储的 token 的黑客将无法使用它,因为他需要找到原始 token 。但是,如果您在客户端对其进行哈希处理,黑客仍然可以使用该 token ,因为他只需将其提交到服务器而无需知道原始 token 是什么。

关于node.js - 哈希然后存储token,需要多少成本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32538778/

相关文章:

security - 如何对加密库进行基准测试?

mongodb - Golang mgo 结果变成简单的 slice

node.js - 将文档添加到文档(子文档)不起作用

Node.js 类问题,或者我做错了什么?

javascript - Node.js 编译我不需要的文件。它在幕后是如何工作的?

mongodb - 如何在 mongodb 中动态 $set 子文档字段?

java - 如何仅在 Spring Security 上对某些 URL 强制使用 https?

java - 小程序安全设置?

node.js - 在 NodeJS 应用程序中分离 socket.io 相关代码的最佳实践是什么?

node.js - 关于so​​cket.io适配器的问题