我有一个ActiveJob触发系统脚本运行:
`grunt custom-job --src=files --dest="file" --vars='#{user_input_vars_from_json}'`
重点在于
user_input_vars_from_json
是一个json配置,来自控制器的用户输入参数。 我确实验证了json格式,但是如何确保没有有害代码发送到我的系统命令?
答案 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#system与Shellwords结合使用,以便在执行作业命令时尽可能安全地接受输入:
{{1}}