我有一个node.js应用程序,它使用child_process.execFile命令来运行命令行实用程序。
我担心用户可以在本地运行命令(一个rm / -rf
恐怖场景会浮现在脑海中)。
使用execFile对Bash脚本有多安全?确保我传递给execFile的标志的任何提示都由托管服务器的unix框进行转义?
更确切地说,我更想知道发送到文件的参数是否可以被解释为命令并执行。
另一个问题是在bash脚本本身内部,这在技术上超出了这个问题的范围。
答案 0 :(得分:1)
child_process.execFile
将使用节点进程的用户ID执行命令,因此它可以执行用户可以执行的任何操作,包括删除所有服务器文件。
让用户传递命令并不是一个好主意,因为你似乎暗示了你的问题。
您可以考虑使用chroot
在沙箱中运行脚本,并限制命令以及可用文件系统上的内容,但这可能会使得complet匆忙。
您传递的命令将直接通过某种exec
执行,因此,除非您尝试执行的是脚本,否则不需要以任何方式进行转义。
答案 1 :(得分:1)
只要用户没有指定命令名称,使用child_process.execFile
本身就是完全安全的。
它不会在shell中运行命令(如child_process.exec
那样),因此不需要转义任何内容。