【问题标题】:Website with node.js, hosting architecture decision带有 node.js 的网站,托管架构决策
【发布时间】:2014-12-18 07:44:19
【问题描述】:

我打算开始我的第一个网站。该网站是一个小型 HTML5+CSS+JS 网站,后端运行 node.js,为存储在 mongodb 上的数据提供服务。我想知道哪一个是安全方面的最佳解决方案:

  • Web 托管(SSL 和 cloudflare)+ VPS 在端口 3000 上提供服务(使用 SSL、cloudflare 和带有敏感数据的 node.js;用户和通行证以及本地 mongodb)

  • 同一个 VPS 中的所有内容。

  • 您可以提供的任何其他方法。

问题是,在第一种方法中,架构中有两个元素,所以如果有人想破解它,我想它会更困难。另一方面,在第二种方法中,如果 VPS 被黑客入侵,一切都被黑客入侵,他们可以访问密码、mongodb 数据库。我对安全非常着迷,因为这是我的第一个网站,我不知道要采取什么措施来保护我的 VPS(node.js 和 mongodb)。

此外,我想知道在效率方面,对于一个每天访问量为 1.000 的 10MB 网站来说,这将是最好的解决方案。

【问题讨论】:

  • 无法回答这个问题。哪个选项更安全的细节与实现的关系比您使用这两个选项中的哪一个更重要。您的两个选择中的一个并不天生就比另一个更安全。

标签: node.js mongodb security hosting vps


【解决方案1】:

您可以在这两种架构之间做出选择。这两种架构都是可破解的,并且您的数据将被暴露。

如果安全至关重要,请查看Mylar - 这是一个保护数据机密性的平台即使攻击者获得对服务器的完全访问权限。 Mylar 仅将加密数据存储在服务器上,并仅在用户的浏览器中解密数据。

它运行在Meteor 之上,而Meteor 又运行在Node.js 之上并使用MongoDB,因此如果您的Web 应用程序很小,那么移植代码应该很容易。 Meteor 还使用bcrpyt 存储密码,最好的 现在的密码哈希算法。

【讨论】:

  • 这不能回答问题。问题是这两种选择中哪一种更安全。这是对不同应用架构的完全正交推荐。
  • @jfriend00:有时你必须从字里行间读懂XY problems
  • 我只是觉得有点奇怪,对他们的应用一无所知,你会跳到推荐一个特定的安全框架。你甚至不知道他们到底想保护什么。基本上,这是一个糟糕的问题,除了疯狂的猜测(这就是你的答案)之外,它的范围太广了。我投票结束了这个问题过于广泛。
  • 我非常感谢 Dan 的回答,他给了我可能会用到的未知数据……我会看看。
  • @Egidi:不,它没有。 Mylar 加密数据字段,这意味着它不会加密元数据,例如您正在访问的 URL 文件夹或传输的数据结构或......您还可以决定不加密某些字段,以便您可以在服务器端进行更多计算。
【解决方案2】:

无论您决定在多少台实际服务器上部署,我都强烈建议您不要直接从 node.js 为您的网站提供服务。相反,通过更强大的 http 服务器(如 Apache 或 Nginx 甚至 lighttpd)代理它。原因很简单,node.js 中的 http 模块从来都不是用来防止蠕虫和黑客攻击以及各种其他恶意软件的。

我自己从头开始编写网络服务器,并注意到通常情况下,您将在服务器上线的第一个小时内进行第一次黑客攻击。在最慢的日子里,你每天会进行大约十几个黑客攻击,然后它就会从那里上升。这些尝试非常普遍,以至于大多数服务器软件不再将它们记录在访问日志中,而是简单地阻止它们。

根据我自己的个人经验,我估计大约 5% 到 10% 的带宽用于失败的黑客/感染尝试。那是我没有受到积极攻击的时候。

通过默默无闻的安全性不是好的安全性。尤其是因为 node 的 http 模块一开始并不是很晦涩难懂,而且这些天肯定有人会发现一个可破解的弱点。

除了安全性之外,与 node.js 相比,在 Apache 或 Nginx 中忽略这些黑客攻击,您浪费的 CPU 周期也更少,因为您不需要运行任何 javascript 代码来处理它们。

【讨论】:

  • 您能否提供有关 node.js 易受蠕虫/黑客攻击的任何参考资料?
  • 例如使用 apache 代替 node.js http 模块是否足以防止您提到的攻击,或者采取任何其他措施来保护服务器?
  • @Aitor:Node 的 CGI 支持还不够成熟,所以你真的不想在不使用 node 的 http 模块的情况下使用 Apache。此外,Java、Python、Ruby 和 Perl 等其他语言已经实现了它们自己的轻量级 http 模块,以此来加速在 Apache 下为 Web 应用程序提供服务。 Node 从第一天起就已经有了这个。所以你想要的是使用 Apache 作为你的 node 应用程序的反向代理 (mod_rewrite) 并配置你的防火墙,以便只有 Apache 从外部暴露。
猜你喜欢
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 2017-03-01
  • 1970-01-01
  • 2015-10-11
相关资源
最近更新 更多