5

我有一个用 node.js 编写的网络服务器,它几乎只是为用户提供静态文件。要为其添加 PHP 支持,我想我可以下载 PHP 并将文件提供给 PHP.exe。如果它由单个用户使用,那将是有效的并且就足够了。然而,对于多个用户将他们的网站托管在服务器上的环境,它会带来一个巨大的安全问题。可以使用 PHP 脚本对任何其他网站甚至整个服务器执行任何他/她想要的操作。

哦,我有没有提到它是一个 Windows 服务器?

无论如何,所以我想要的是获得一些权限以将 php 脚本保存在特定目录中。我正在考虑为每个网站创建一个用户,我将在该网站上应用适当的权限,而不是在使用“运行方式”之类的东西执行 php.exe 时(假设它是可能的)。我还有其他方法可以实现我的目标吗?如果是这样,它们会更好吗?为什么这样?

另外,如果您有兴趣,我的代码如下所示: http: //pastebin.com/gZjN1mnj

此外,我知道在使用我的服务器时,$_POST、$_SERVER、$_COOKIE、$_SESSION 等都丢失了,但我已经考虑过如何解决这个问题并对其进行了一次成功的测试。

现在我已经感受到了回应:你为什么要那样做?或者不要,apache/nginx 更好,等等等等。把它当作一个学习过程,我只是对我是否可以让它真正工作很感兴趣^^

谢谢你。

4

1 回答 1

4

恭喜混合袋弗兰肯平台你的发展:)

切换到 Linux 使用 process.setuid

Node.js 是一个很棒的网络服务器,所以我可以看到它的吸引力。通过在 Windows 上运行 node 和 php,您正在上游游泳。如果你有控制权,我会切换到linux。

如果你在 Linux 中运行,Node 有一个内置函数 process.setguid 和 process.setuid 你必须是 root 才能运行这些,但是 node.js 程序可以作为 root 运行,为每个用户生成一个节点进程,然后监狱本身和将所有流量路由到被监禁特定用户的子节点进程。

每个用户都有一个特定的 php.ini

您可以使用 php 安全模式、base_dir 和其他 ini 命令来尝试将 php 锁定到特定的目录树。这是不稳定且不完整的,并且由于存在错误和解决这些问题的方法,其中许多功能已在最新版本中被弃用或删除。但是用你的 php 命令行调用传入一个 ini 文件是微不足道的。

使用第三方 RUNAS 实用程序

要在 Windows 中真正获得用户安全,您必须运行类似 autoIT RunAs http://www.autoitscript.com/autoit3/docs/functions/RunAs.htm

与普通的 runas 命令相反,此命令允许您指定密码,以便可以从您的节点进程运行它。

于 2012-12-06T20:32:35.340 回答