【问题标题】:Is it safe to use non-local variables in Node.js?在 Node.js 中使用非局部变量是否安全?
【发布时间】:2012-01-22 00:11:55
【问题描述】:

在 Node.js/Express.js 中做这样的事情安全吗?

// use Object.create(null) so we don't have to worry about key collisons
// see http://www.devthought.com/2012/01/18/an-object-is-not-a-hash/
var theHash = Object.create(null);

exports.store = function (req, res) {
   key = getUniqueKey();
   theHash[key] = req.param('val');
   // finish the request, &c.
}

exports.retrieve = function (req, res) {
   res.end(theHash[req.param('key')]);
}

基本上,我正在构建一个短暂的短 URL 服务,这似乎是一种简单快捷的方法。每 24 小时从哈希中删除项目,因此它不会变大。这是安全的,还是我需要使用某种数据库?

【问题讨论】:

  • 安全吗?什么不安全?
  • @Layke 我想确保我不会因为范围界定或其他原因(除了定期清除或服务器崩溃)而丢失存储的值。我知道这在一般的 Javascript 中是安全的,但我是 Node.js 的新手。我也想知道这是否是糟糕的设计。
  • 另外,它在竞争条件下安全吗?
  • @DeaDEnD 好点。在这种情况下,这不是问题,因为 getUniqueKey 返回一个必须包含一个字母和一个数字的唯一键,但总的来说,这是一个很好的观点。我已经编辑了帖子以使示例代码更好。

标签: javascript node.js scope express


【解决方案1】:

如果您想要提示(根据 cmets),那么是的,这是糟糕的设计,但并不是特别错误。

您会更适合为此使用 Redis,这是一个内存键 => 值存储。虽然您所做的并没有错,但是您正确地注意到将密钥保存在本地感觉“肮脏”(出于多种原因,但至关重要的是,如果节点死亡,您将失去一切)。

【讨论】:

  • 您能详细说明几个原因吗?我猜线程是一个,还有其他的吗?
  • @mattwigway 线程?如果您使用 Node.js,则无需考虑线程。它只在一个线程上运行!只有文件/网络访问等其他外部操作在其他线程上完成。
  • 我的措辞很糟糕。我假设如果 Node 应用程序变得非常流行,可能需要通过使用多个进程(而不是多个线程)进行扩展
  • 是的,那将是另一个原因。有太多的小妙语不能使那个解决方案“完美”。而内存中的存储将是理想的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-22
  • 2012-06-14
  • 2017-12-30
相关资源
最近更新 更多