rails如何安全地从rails命令运行系统命令

时间:2017-04-15 11:00:52

标签: ruby-on-rails security

我有一个ActiveJob触发系统脚本运行:

 `grunt custom-job --src=files --dest="file" --vars='#{user_input_vars_from_json}'`

重点在于

user_input_vars_from_json

是一个json配置,来自控制器的用户输入参数。 我确实验证了json格式,但是如何确保没有有害代码发送到我的系统命令?

1 个答案:

答案 0 :(得分:1)

我只想在此前言:任何用户输入都应被视为危险。我不建议使用用户提供的输入执行任何命令。

您要做的第一件事就是尽可能锁定输入。考虑限制user_input_vars_from_json的长度以防止缓冲区溢出和DoS攻击。我还建议尝试找出一种方法来验证和限制" vars"您正尝试在require 'shellwords' system("grunt", "custom-job", "--src=files", '--dest="file"', "--vars=\"#{Shellwords.escape(user_input_vars_from_json)}\"" JSON中设置以过滤掉任何不需要的键/值。

清理输入后,您可以将Kernel#systemShellwords结合使用,以便在执行作业命令时尽可能安全地接受输入:

{{1}}