有没有一种方法可以“转义” Linux命令?

时间:2019-08-17 02:26:57

标签: linux ssh server scp

我正在提供一项服务,该服务将允许用户将文件发布到我的Web服务器,然后将文件(经过几次检查)复制到图像服务器。 Web服务器和图像服务器之间进行通信的主要方式是scp。但是,我也想维护用户文件名,所以看起来像这样:

  1. 用户将其文件发布到Web服务器
  2. Web服务器检查文件是否受支持
  3. Web服务器检查文件是否在文件大小限制之内
  4. Web服务器说“确定”,然后尝试发送到图像服务器
  5. Web服务器运行(“ scp” +文件路径+“ root @ imageServer:〜/ images”)
  6. 图像服务器已接收文件,并准备根据请求将文件发送给用户(该文件夹是公共文件夹,将由nginx提供)

这里最危险的部分是scp命令。我不是安全专家,但是有没有办法像数据库可以注入SQL一样劫持此命令?如果有人将其文件命名为恶意文件怎么办。有没有办法安全地将文件名加入脚本?要安全地“转义”命令?

我正在对Web服务器使用express(node.js)。有没有其他方法可以将文件从Web服务器发送到简单的Ubuntu安装,而无需使用Unix命令或为图像服务器编写REST API?是否存在,那么我可能根本不需要“逃避”

顺便说一句,我之所以选择将图像服务器和Web服务器分开是因为我想在将来扩展应用程序。例如,如果有10台Web服务器,而没有中央图像服务器,那么如果文件不在您请求的Web服务器上,则将无法检索文件。

1 个答案:

答案 0 :(得分:0)

您可以使用child_process.spawn(或child_process中的其他方法)在没有外壳的情况下运行外部命令(因此没有外壳元字符的问题)。 (显然,您不得将shell选项指定为默认false之外的其他选项。)

这使您不必担心文件路径中的元字符,但是在我看来,让用户提供要在实时文件系统上使用的文件路径名还有很多其他问题。就个人而言,我会自动生成安全的短名称,并将用户名与文件系统名之间的对应关系保存在某处的数据库中。