Node.js是否为企业安全而成熟?

我们的开发团队一直在考虑将Node.js用于需要高级安全性的新型企业应用程序。 用户包括联邦警察,所以我们很有可能最终会对安全进行审计。

  • 鉴于Node.js是相对较新的,是否还有安全问题需要解决?
  • 有没有人有任何与Node.js的发展经验和任何洞察潜在的攻击使用其结构?

我感谢帮助。

编辑:一些StackOverflow的用户build议使用反向代理,但我很好奇,如果有人有更多的build议。

    虽然我不能指出任何具体的报告缺陷,但我会对node.js体系结构感到紧张 – 代码作为web服务器代码的一部分运行。 虽然有类似mod_php,但仍然只有一个进程处理HTTP和逻辑层,2之间有明确的function分离,并且web服务器和逻辑层之间的接口已经过明确的devise和testing以适应失败 – 特别是在逻辑层。

    此外,还有很多可用于Web服务器(特别是Apache)的工具,它们便于pipe理和(正确使用)增强安全性。

    另一个主要的考虑是技能/支持/培训的可用性 – 无论其质量/效用如何,node.js与其他Web开发平台相比有很多的追赶。

    我们的开发团队一直在考虑使用Node.js

    你正在专门试图在一个平台上提供一个非常安全的应用程序,根据你上面的陈述来看,你并不完全熟悉这个平台,这似乎是非常鲁莽的。 Web应用程序中的大多数安全漏洞不是由于开发环境中的错误,而是由于添加了定制代码中的错误。

    当然使用反向代理将有助于获得标准的HTTP日志logging,exception检测和减less协议级别攻击的影响。

    构build安全Web应用程序的最佳工具之一是mod_security – AFAIK,它只能在Apache中运行 – 但是它可以提供部署前端系统的可能性(以及mod_proxy ),提供通常的Web服务器function(日志logging,静态内容)以及authentication服务,并使用node.js作为后端。

    如果你可能知道并发性是IO绑定,那么它主要用于并发。

    一个比NodeJS快得多的选项是使用mono + F#和它的asynchronous支持。 然后你可以使用HttpListener像NodeJS一样接近socket。

    对上述select漠不关心 其他的SELinux和chroot可能是很好的工具。

    根据我的经验,代码中的大多数安全隐患都会导致执行任意代码,这些安全隐患来自对数据库/磁盘的写入权限不佳,从而允许您请求上传的文件,或者从执行不良内存pipe理/边界检查的非托pipe代码。

    反向代理也是一个不错的select,因为他们是战斗硬化。 HAProxy例如 – 它可以处理WebSockets和最新版本的普通HTTP。

    然后你可以使用一些工具来实际testing实现。 Google使用工具调用skipfish: https : //code.google.com/p/skipfish/

    您可以在协议级别和应用程序级别使用模糊器,但是编译器为您certificate的越多越重要,就像使用JS无法更改对象实例或F#的types一样更多的静态检查与歧视工会和措施单位。

    最后,如果你的代码安全性很高,我会推荐使用Haskell的Stact Framework,你可以使用编译器来保证安全。 有了Haskell,你甚至可以用Coq,一个certificate助手或者Agda写出小的certificate(参见Haskell定理certificate )

    为了与你的服务器通信,你可能会有一个DNS。 您还需要使用DNSSec来确保安全,否则您可能会收到DNS中毒。

    如果他们进入局域网,你可以得到ARP Poisioned,这意味着有人可以窃取你的IP; 但是您可以使DNS服务器静态维护networking中的所有主机也检查的IP到MAC查找表中的任何人。

    最后,你可以添加一个像Snort这样的IDS到你的networking,并logging你的程序的“正常”执行,这样你也可以反应exception。

    理想情况下,整个应用程序应该受到内联网或VPN的限制,或者至less受到客户端的IP地址的限制,特别是如果要由任何联邦官员使用的话。 如果攻击者甚至不能击中Web服务器,那么他们肯定无法利用Node.js,对吧?