ruby - 在 Ruby 中形成卫生 shell 命令或系统调用

标签 ruby security shell system sanitization

我正在构建一个守护进程来帮助我管理我的服务器。 Webmin 工作正常,就像打开服务器的 shell 一样,但我更希望能够从我设计的 UI 控制服务器操作,并向最终用户公开一些功能。

守护进程将从队列中获取 Action 并执行它们。但是,由于我将接受用户的输入,我想确保不允许他们将危险的东西注入(inject)到特权 shell 命令中。

这里有一个片段可以说明我的问题:

def perform
  system "usermod -p #{@options['shadow']} #{@options['username']}"
end

解释更多的要点:https://gist.github.com/773292

我不确定典型的输入转义和清理是否足以满足这种情况,而且作为一名设计师,我没有大量与安全相关的经验。 我知道这对我来说应该是显而易见的事情,但事实并非如此!

我如何确保将创建和序列化操作的 Web 应用程序不会将危险文本传递到接收操作的特权进程中?

谢谢你的帮助
套利

最佳答案

看起来您的工作不需要 shell 。请参阅此处的 system 文档:http://ruby-doc.org/core/classes/Kernel.html#M001441

您应该使用 system 的第二种形式。您上面的示例将变为:

system 'usermod', '-p', @options['shadow'], @options['username']

一个更好的(IMO)写法是:

system *%W(usermod -p #{@options['shadow']} #{@options['username']})

这种方式的参数直接传递到 execve 调用中,因此您不必担心偷偷摸摸的 shell 技巧。

关于ruby - 在 Ruby 中形成卫生 shell 命令或系统调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4650636/

相关文章:

windows - 在 Windows 上用 ruby​​ 编译 openssl

security - 非常简单的密码生成方案;这样安全吗?

PHP代码注入(inject)。我们有安全风险吗?

linux - 这是写opts的正确方法吗

shell - Unix区分大小写的UTF-8排序

ruby - 在 Ubuntu/Debian Linux 上安装 nokogiri

html - 对不在 <form> 标签中的表单使用 ruby​​ mechanize?

ruby-on-rails - Ruby On Rails,Redis::CommandError: 'set' 命令的 ERR 参数数量错误

api - 使用 JWE 或 JWS 的优缺点是什么

python - 自动化 vi/nano 编辑器进行 git commit --amend