轨如何从轨道运行系统命令命令安全

轨如何从轨道运行系统命令命令安全

问题描述:

我有触发系统脚本运行ActiveJob:轨如何从轨道运行系统命令命令安全

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

点是是

user_input_vars_from_json 

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

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

您要做的第一件事就是尽可能锁定输入。考虑限制user_input_vars_from_json的长度以防止缓冲区溢出和DoS攻击。我还建议尝试找出一种方法来验证和限制您试图在user_input_vars_from_json JSON中设置的“变量”,以过滤掉任何不需要的键/值。

一旦你输入清洗,你可以结合使用Kernel#systemShellwords得到尽可能接近安全地从你的工作执行你的命令:

require 'shellwords' 
system("grunt", "custom-job", "--src=files", '--dest="file"', "--vars=\"#{Shellwords.escape(user_input_vars_from_json)}\""