是否有(相对)安全的方法从网络运行 CLI 命令?

是否有(相对)安全的方法从网络运行 CLI 命令?

自从我开始编写 LAMP 应用程序以来,我想为我的盒子开发一个管理控制面板。 (出于娱乐和教育目的,否则我会使用市场上已有的东西)

但总是阻止我的是我总是听说 exec() 函数(我知道实现这一点的唯一方法)是邪恶的......你知道:“不要使用它们”,“这是糟糕的编码”,等等。

我从未听说过为此目的有更安全的选择,所以我的问题是:

有没有?

在专用 Web 服务器中运行该应用程序并使用受密码保护的文档根目录还不够吗?

嗯,这是我的疑问。

答案1

我认为真正的风险是当您将用户的输入混合到其中之一时exec()。这是大多数风险出现的地方,因为您允许用户向您提供输入,当混合到 CLI 中时可能会执行危险的操作,例如;在文本框中插入分号 ( ) 并在输入后运行其他命令已经提供了论据。

因此,一般来说,以只读方式运行命令不会比执行其他操作更危险。

这与您可能更熟悉的 SQL 注入攻击基本上是相同的问题。

答案2

据我所知(我并不是真正的程序员,所以要持保留态度),exec()调用根本不是邪恶的。只是它们分叉了一个新进程,并且由于您正在调用系统函数而具有很高的开销。一般来说,人们建议您在编写的任何程序/脚本中在内部执行操作,并避免像exec().

但是,如果您的目标是在系统上执行命令,则没有这样的调用就无法做到这一点。当然,存在安全风险,允许随机用户在您的服务器上执行任意命令会带来麻烦。但是,如果对该服务器的访问受到严格限制,您应该能够安全地进行访问。

无论如何,主要结论是,exec()函数本质上并不是坏事,它们只是比在内部做某事效率低。

相关内容