【问题标题】:Running bash script in backend safe?在后端安全地运行 bash 脚本?
【发布时间】:2021-08-01 22:14:03
【问题描述】:

您好,我对 Web 安全还很陌生,担心可能的 shell/命令注入风险。我想知道仅在我的 nodejs 后端运行命令行脚本并让网络主机运行它是否安全。

据我了解,由于无法从网站及其前端访问后端,因此可以安全运行。

【问题讨论】:

    标签: node.js shell security command-line


    【解决方案1】:

    据我了解,由于无法从网站及其前端访问后端,因此可以安全运行。

    这基本上是正确的,但我将其改写为:

    只要您传递给 shell 脚本的参数是硬编码的或服务器生成的值,就可以安全地从 Web 服务器运行 shell 脚本。

    当您获取来自网络用户的字符串并将它们作为参数传递给 exec 调用时,就会发生外壳注入。可以安全地执行此操作,但您需要仔细清理或转义输入以使其命令行安全,但这有点棘手且难以正确执行,因为您需要的“危险字符”列表在 bash、zsh、powershell 等中,清理/转义是不同的。

    【讨论】:

    • 感谢您的回复!澄清一下,如果我的前端没有用户输入最终出现在 shell 脚本中,那么我就完全安全了?
    • 是的,我会这么说,因为服务器外部的用户无法让该脚本执行任何意外的操作(请参见脚注 1)。
    • footnote 1:我只是在互联网上随机的一个家伙,并没有检查你的代码。如果事实证明不是“完全安全”,我不承担法律责任。
    • 再次感谢,当然您不对我的代码负责!最后一个问题,我的 shell 脚本中的登录凭据是否安全且对用户不可见?
    • @Tris 只要通过网络应用程序泄露给网络用户,那也应该没问题。但是,将凭据放入 shell 脚本往往是一个禁忌,因为很容易将该文件意外地检查到 git 中,或者有人通过电子邮件发送源代码,或者让它“走开”。更好的做法是从 env vars 中读取凭据并让管理员将它们放在那里。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-31
    • 2013-08-13
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    相关资源
    最近更新 更多