在我的 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/