【问题标题】:Variable "security" in node.jsnode.js 中的变量“安全性”
【发布时间】:2011-09-12 20:14:27
【问题描述】:

我一直在用 express 和 mongoDB 在 node.js 中设计一个 Web 应用程序,我突然想到,我在脚本中声明的任何变量都将可供所有用户访问,因为 node 作为单线程运行。例如,我正在使用服务器端表单验证器,这里是其中的一部分:

app.post('/purchase', requireLogin, function(req, res) {
var b = req.body;
var ee;
for (i in b) {
    if (!validatePresenceOf(b[i])) {
        var ee="Please fill out all fields.<br />\n";
    }
}

var exp = b.exp_mm+"/"+b.exp_yy;
var d = /^(0[1-9]|1[012])[- /.]\d\d$/
if (!d.test(expiration)) {
    ee+="Expiration date is invalid.<br />\n"
}

if (!isValidCreditCard(b.card_type, b.card_num)) {
    ee+="Credit card number is invalid.<br />\n";
}
});

我想知道如果另一个用户几乎同时进行购买,变量 b 是否可以在验证器完成之前由第二个请求重新定义?如果可以,那么最好的解决方法是什么,每次我声明一个变量时都会发生这种情况吗?如果在进程完成之前更改变量,这似乎会导致一些安全问题。

谢谢!

【问题讨论】:

  • 确实是单线程的。这意味着一次只能运行一次 js 代码。所以这些你想象的问题(函数并行运行两次)不可能发生,因为一次只能运行一个代码块
  • @Raynos 还有词汇范围的问题;)

标签: javascript node.js express


【解决方案1】:

不,该变量不会被共享,因为由于函数关闭,它仍将仅对正在运行的进程具有词法范围。

您在函数中使用var b 声明它的事实定义了它具有该词法范围。

【讨论】:

  • 好的,谢谢!我担心我将不得不返回并为 req.session 或其他东西分配一堆随机变量。
  • 不,但那些会遭受同样的命运。这都是关于范围的,这总是值得阅读的好东西。此外,在 javascript 中使用的“闭包”一词。
猜你喜欢
  • 1970-01-01
  • 2012-03-31
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 2011-07-23
相关资源
最近更新 更多