You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails拆分system调用参数规避Brakeman警告时如何实现输出重定向

修复方案

直接使用 Ruby Kernel#system 内置的 IO 重定向参数即可,无需依赖 shell 的 > 符号,修改后代码如下:

system('pg_dump', '-F', 'c', '--no-acl', '--no-owner', '--quote-all-identifiers', database_url, out: file_name)

原理解释

  • 最初的字符串拼接写法会触发 shell 解析,若database_url或file_name存在恶意构造的特殊字符,就会产生命令注入风险,这是Brakeman报警的根本原因。
  • 改为数组参数调用system的思路是正确的:这种模式会直接启动pg_dump进程,不经过shell层解析,自然不会识别shell专属的重定向符>,这就是之前修改后输出不生效的原因。
  • Ruby的system方法支持在参数末尾传入哈希配置IO重定向规则,out: file_name表示将命令的标准输出直接写入指定文件,全程不涉及shell解析,完全规避命令注入风险,同时可以通过Brakeman的安全扫描。

内容的提问来源于stack exchange,提问作者akira

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 21:15:03