3

我正在使用 PHP 和 mySQL 数据库构建网站。该网站现在具有登录/注册功能,并且可以访问带有墙壁的个人资料。在同一个网站上,我想使用 websockets 构建一个大型聊天应用程序。此聊天应托管动态扩展的聊天室数量(可能会达到数千个)中型群组(+/- 25 人)。

我一直在考虑使用 node.js 来运行 websockets,但我只想使用 node.js 来处理传入的消息和广播。另外,我想使用 PHP 将传入的消息保存在数据库中。我想在 node.js 服务器文件中使用 http 调用来处理这个问题,如http://docs.nodejitsu.com/articles/HTTP/clients/how-to-create-a-HTTP-request中所述。我还想使用 http 请求来获取用户的属性(例如姓名和个人资料图片),因此这些可以显示给同一聊天室中的其他用户。我不想处理这个客户端,因为用户可以很容易地伪装成其他人。

php 网站和 node.js 服务器都在 localhost 上运行。该网站在 127.0.0.1:80 上运行,服务器在 127.0.0.1:1337 上运行。

我的问题是,这种方法可以保存吗?在 node.js 服务器上执行 http 请求以从数据库发送/接收数据是否存在任何安全风险?在 PHP 网站旁边运行 node.js 是个好主意,还是应该完全在 node.js 上构建我的网站?还有其他选择吗?

4

3 回答 3

2

这种方法安全吗?

当然。我的意思是技术上,当然。它并不比任何单独的技术更不安全。但是,它确实使您的架构更加复杂,这可能会稍微导致更多的人为错误和错误或安全问题。但这更多的是关于人类和复杂性,而不是技术本身。

在 node.js 服务器上执行 http 请求以从数据库发送/接收数据是否存在任何安全风险?

不,不超过任何其他后端技术。它位于网络服务器后面,运行可能访问或不访问数据库的代码并返回响应。许多生产网站都在运行 node.js,没有任何安全问题。

在 PHP 网站旁边运行 node.js 是个好主意,还是应该完全在 node.js 上构建我的网站?

这很难回答。我认为总体而言,一种更简单且更可维护的模式也将事物和技术保持在一个地方。但是随着应用程序的增长,实际上很常见的是删除独立的部分并以自己最好的方式实现它们。通常这与性能有很大关系,将高流量系统与低流量系统分开,就像它与技术本身的能力一样。

但这通常在您拥有多个具有不同角色的服务器时发挥作用。对于较小的项目,通常价值较小。


我不知道这是否回答了你的问题,但简而言之:它本质上并不坏。这取决于。

于 2012-11-12T23:52:24.020 回答
0

我不认为混合 Node.js 和 PHP/Apache 有什么本质上的不安全性。就像在你的电脑上运行多个程序一样,它们有自己的空间,监听自己的端口,不直接相互对话。

但我个人会更关心服务器资源(你的 CPU 有多快?有多少 RAM?)。仅在一个平台上构建您的网站肯定会更有效。但是根据您正在构建的内容,两者都可以。

从我看到的基准来看,Node.js 比 Apache 更需要资源。但是 Node.js 对于某些应用程序也非常快。

于 2012-11-12T23:43:38.887 回答
0

我在生产环境中同时运行 PHP 和 nodejs,它的安全性不亚于任何其他 CGI 后端。没有人提到的一件事是 Nginx 还不支持 WebSockets,因此如果您想同时支持 PHP 应用程序和使用 websockets 的 nodejs 应用程序,那么将 Nginx 绑定到端口 80 将不起作用。

在这里查看我的答案以获得我的解决方案:nginx vs node-http-proxy

编辑:从 1.3.13 版开始,Nginx 支持网络套接字。Nginx 现在已经在我的生产堆栈的 80 端口上收回了它应有的位置。

于 2012-11-13T18:10:39.693 回答