我有一个 node.js 应用程序,它使用 child_process.execFile 命令运行命令行实用程序。
我担心用户可能会在本地运行命令(rm / -rf
想到一个恐怖的场景)。
将 execFile 用于 Bash 脚本的安全性如何?确保我传递给 execFile 的标志被托管服务器的 unix 框转义的任何提示?
编辑
更准确地说,我更想知道发送到文件的参数是否可以解释为命令并执行。
另一个问题是 bash 脚本本身,这在技术上超出了这个问题的范围。
我有一个 node.js 应用程序,它使用 child_process.execFile 命令运行命令行实用程序。
我担心用户可能会在本地运行命令(rm / -rf
想到一个恐怖的场景)。
将 execFile 用于 Bash 脚本的安全性如何?确保我传递给 execFile 的标志被托管服务器的 unix 框转义的任何提示?
更准确地说,我更想知道发送到文件的参数是否可以解释为命令并执行。
另一个问题是 bash 脚本本身,这在技术上超出了这个问题的范围。
child_process.execFile
将使用节点进程的用户 ID 执行命令,因此它可以执行用户可以执行的任何操作,包括删除所有服务器文件。
正如您的问题所暗示的那样,让用户传递命令并不是一个好主意。
您可以考虑通过使用在沙箱中运行脚本chroot
,并限制命令和驻留在可用文件系统上的内容,但这可能会很快完成。
您传递的命令将通过某种风格直接执行exec
,因此除非您尝试执行的是脚本,否则不需要以任何方式对其进行转义。
child_process.execFile
只要用户不指定命令名称,单独使用是完全安全的。
它不会在 shell 中运行命令(就像child_process.exec
那样),所以不需要转义任何东西。