【问题标题】:How do I prevent Node.js / Express serving up my application's source code?如何防止 Node.js / Express 提供我的应用程序的源代码?
【发布时间】:2012-11-30 17:51:33
【问题描述】:

我从没想过这会是 Node.js 和 Express 的问题,但一时兴起,我决定在浏览器中输入我的 Node.js Express 项目中一个源文件的位置 - 类似于:

http://www.mywebsite.com/mynodejsapp/app.js

令我极度恐惧,我的应用程序的源代码立即弹出,公开供所有人查看。

那么,除此之外:如何在 Node.js / Express 中阻止它?

我的设置代码非常简单:

var app = express();
app.configure(function() {
    app.use(express.static('/home/prod/server/app/public'));
});
app.listen(8888);

澄清一下,这就是我的文件夹结构:

/home/prod/server/
/home/prod/server/app.js
/home/prod/server/public/

/public打算供公众访问的各种文件。我所有的服务器源代码都位于/server/ 下,我对 Express 的静态文件夹配置的理解是,静态文件夹是 Express 愉快地从文件系统中提供文件的唯一位置。

有什么想法吗?

【问题讨论】:

  • 您的应用正在监听 :8888 而不是 :80 - 您发布的网址是否正确?您是否通过 Apache 或其他网络服务器代理 express 应用程序?
  • Nginx 代理运行在 80 端口,将所有流量转发到 8888
  • 使用静态公用文件夹。

标签: security node.js express


【解决方案1】:

从您发布的内容来看,您输入的网址确实闻起来像是由例如服务提供的。 Apache/nginx/... 并且您确实将您的节点应用程序放在了文档根目录中。在这个(以及任何类似的)案例中,答案很简单:

从不将任何源代码文件放在文档根目录或其他 HTTP 可访问的文件夹中。在您的情况下,/home/prod/server/app/public 应仅包含客户端内容(HTML、CSS、图形、(缩小的)客户端 JS),并且 nginx 不应将此文件夹上方的任何内容作为其文档根目录。

【讨论】:

  • 这听起来很简单,但我不认为它真的如此;为什么 Express 从我配置的静态文件夹的文件系统 outside 中提供任何东西? /home/prod/server/app/public 只包含客户端的东西。问题已澄清。
  • 所以http://www.mywebsite.com 实际上直接进入您的节点网络服务器? IE。没有 nginx/apache/介于两者之间的任何东西?
  • 不应该;我的节点服务器在 8888 端口上运行,我将 nginx 设置为代理,将所有 80 端口流量转发到 8888。
  • 那么很可能是你的nginx配置有问题。尝试将root /var/empty(或其他一些空文件夹)添加到您的 nginx 配置中。还要检查(假设节点在标准输出上的请求日志)这些“坏”请求是否曾经命中您的节点实例。我有点怀疑。
  • 是的,nginx 配置。疯了,不敢相信我让这件事过去了。谢谢。
猜你喜欢
  • 1970-01-01
  • 2017-04-17
  • 2017-05-06
  • 1970-01-01
  • 1970-01-01
  • 2012-02-13
  • 2017-06-13
  • 2018-10-30
  • 1970-01-01
相关资源
最近更新 更多