gpt4 book ai didi

linux - 有没有办法执行 "escape"linux 命令?

转载 作者:太空宇宙 更新时间:2023-11-04 11:46:25 27 4
gpt4 key购买 nike

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

  1. 用户将他们的文件发布到网络服务器
  2. Web 服务器检查文件是否受支持
  3. Web 服务器检查文件是否在文件大小限制内
  4. Web 服务器说 OK 并尝试发送到图像服务器
  5. Web 服务器运行 ("scp "+ filepath + "root@imageServer:~/images")
  6. 图像服务器收到文件并准备根据请求将文件发送给用户(该文件夹是公共(public)的,将由 nginx 提供服务)

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

我正在为 Web 服务器使用 express (node.js)。有没有另一种方法可以将文件从 Web 服务器发送到简单的 Ubuntu 安装,而无需 unix 命令或为图像服务器编写 REST api?有没有,那我可能根本就不需要“逃”

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

最佳答案

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

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

关于linux - 有没有办法执行 "escape"linux 命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57532854/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com