ruby-on-rails - 防止通过 URL 输入注入(inject)

标签 ruby-on-rails security unix

在我的 Rails Controller 中,我获取用户输入的 URL 并运行系统命令 wget:

system("wget #{url}")

我担心用户可能会输入类似 www.google.com && rm -rf . 的内容,这会使 Controller 执行命令

system("wget www.google.com && rm -rf .")

这会删除所有内容。我应该如何防止这种攻击?我不确定用户还可以放入哪些其他东西来损害我的系统。

最佳答案

根据 this thread :

您可以通过将参数单独传递给脚本来避免 shell 扩展:

system("/bin/wget", params[:url])

根据 Kernel#system 上的文档这种形式不调用 shell。像 && 这样的结构是 shell 结构,所以如果你使用这种形式,那么参数将作为参数传递给 /bin/wget

也就是说,仍然对输入持怀疑态度,在可能的情况下进行清理,如果可行,以非特权(或者更好的是,被监禁)用户身份运行它。

关于ruby-on-rails - 防止通过 URL 输入注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13337768/

相关文章:

ruby-on-rails - ActiveSupport::MessageVerifier::InvalidSignature: ActiveSupport::MessageVerifier::InvalidSignature 错误在 rails 5

ruby-on-rails - 如何检查 HTTP 请求延迟/等待时间的原因?

security - 防止 SVG 被轻易逆向工程

java - 将大型代码项目从 Unix 盒子移至 Eclipse 项目

linux - 以非目录所有者身份删除目录

ruby-on-rails - active_for_authentication?不工作

ruby-on-rails - 大型机器上的 Rails 应用程序仅获得 60 个请求/秒的基准测试结果

android - 在 Android 上存储信用卡信息安全吗?

html - 将用户输入显示为输入值而不进行清理是否安全?

unix - SSH命令挂起