如何清理 shell 命令并在 Ruby 中获取输出?
我必须运行一些用户输入的 shell 命令。我找到了一种看起来安全的方法: system *%W(ls #{file})
[此处]。
我需要获取该命令的输出,所以我不能只使用 system
。有没有办法清理反引号 ``
或 %x[]
命令?
I have to run some shell commands where the user gives the input. I found one way which seemed secure: system *%W(ls #{file})
[here].
I need to get the output of that command, so I cant just use system
. Is there a way to sanitize the command for backticks ``
or for %x[]
?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您需要
IO::popen
而不是系统
。您仍然可以在没有 shell 的情况下传递字符串数组来调用命令,并且可以从生成的 IO 对象中读取
。如果您也想阅读 stderr,请使用
open3
模块而不是IO。You want
IO::popen
instead ofsystem
. You can still pass an array of strings to invoke the command without a shell, and you canread
from the resulting IO object.If you want to read stderr too, then use the
open3
module instead of IO.您正在运行哪些 Ruby 无法支持的 shell 命令?如果要列出文件,请使用 Dir
What kind of shell commands are you running that Ruby cannot support? If you are listing files, use Dir