轨如何从轨道运行系统命令命令安全
问题描述:
我有触发系统脚本运行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#system与Shellwords得到尽可能接近安全地从你的工作执行你的命令:
require 'shellwords'
system("grunt", "custom-job", "--src=files", '--dest="file"', "--vars=\"#{Shellwords.escape(user_input_vars_from_json)}\""