标签: ruby shell sanitize
我必须在用户提供输入的地方运行一些shell命令。我找到了一种看似安全的方法:system *%W(ls #{file}) [here]。
system *%W(ls #{file})
我需要获取该命令的输出,所以我不能使用system。有没有办法清理反引号``或%x[]的命令?
system
``
%x[]
答案 0 :(得分:3)
您希望IO::popen代替system。您仍然可以传递一个字符串数组来调用没有shell的命令,并且可以从生成的IO对象中read。
IO::popen
read
如果您也想读取stderr,请使用open3模块而不是IO。
open3
答案 1 :(得分:0)
你运行什么样的shell命令,Ruby不支持?如果您要列出文件,请使用Dir