【问题标题】:Why is running node.js on port 80 might not be safe?为什么在端口 80 上运行 node.js 可能不安全?
【发布时间】:2013-10-24 22:35:28
【问题描述】:

我知道 nodejs 可以在 80 端口上运行:

  • 使用 apache/nginx 设置代理
  • 使用 iptables 规则设置端口重定向
  • 在应用内的端口 80 上进行快速侦听

第一个选项不是最简单的,并且需要比我需要的更多的依赖项。第二个可以工作,但在我的 OpenVZ VPS 上它不会(而且我无法编译自定义的 linux 内核)。

我也需要处理一些子域,在阅读了stackoverflow answer 之后,我尝试了第三种解决方案。 它运行良好且非常容易执行。

我想知道直接在 80 端口上运行 nodejs 时是否可能存在一些安全问题?我该如何修复/找到这些?

我想使用 pm2 来处理进程,它可能会运行 not as root (Goodbye node-forever hello pm2)。

【问题讨论】:

  • 为什么会比其他端口安全?
  • @dystroy:它可能不如通过 nginx 代理安全,以防有人发现 Node 的 HTTP 解析器中的漏洞。
  • @dystroy 好问题,所以使用代理、iptable 或直接在端口 80 上运行它会导致相同的安全问题?
  • 如果您的防火墙没有屏蔽原始端口,那是肯定的。如果确实如此并且您使用了代理并且 Node 的 http 解析器中存在被代理掩盖的漏洞,那么此解决方案可能会更快。但我对此表示严重怀疑,在考虑这样的解决方案之前,我需要一个指向该漏洞的链接。

标签: linux node.js


【解决方案1】:

第一个选项不是最简单的,需要更多的依赖项然后我需要

请查看why should one use a http server in front of a framework web server 有很多正当理由您实际上应该这样做。

使用 iptables 规则设置端口重定向

这可能比直接让你的节点进程监听端口 80 更好,尽管我还没有看到生产中使用过这种类型的配置。

在应用内的端口 80 上进行快速侦听

这在功能上是一个糟糕的选择,因为您没有获得上面链接答案中概述的好处,但是,从严格的安全角度来看,要记住的关键是 您不能以 root 身份运行您的节点进程,这将是一个可怕的安全问题。您必须是 root 才能绑定到端口 80,因为这是 unix 的规则,但您可以而且必须在绑定到该端口后立即更改为权限较低的用户。

【讨论】:

  • 我正在使用pm2,我认为他们正在努力以用户身份运行它。感谢您的链接非常有趣!
  • 在端口重定向和使用像HAProxy 这样的重定向代理之间有一个很好的界限。正如您所指出的,以root 运行几乎总是一个非常糟糕的主意。
猜你喜欢
  • 2011-08-31
  • 2012-02-12
  • 2013-10-02
  • 2017-02-25
  • 2015-09-28
  • 2014-08-16
  • 1970-01-01
  • 1970-01-01
  • 2011-06-16
相关资源
最近更新 更多