Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 禁用ERB上的外壳输出_Ruby On Rails_Ruby_Erb - Fatal编程技术网

Ruby on rails 禁用ERB上的外壳输出

Ruby on rails 禁用ERB上的外壳输出,ruby-on-rails,ruby,erb,Ruby On Rails,Ruby,Erb,是否有任何方法可以禁止恶意输入在服务器中炮击和运行 例如,从用户接收模板化ERB输入时,如下面的代码段所示 请注意,这是一个简单的概念证明,因此可以在irb内的终端上复制它,但恶意输入可以是任意bash命令 require "erb" malicious_input_from_user = '<%= `ls` %>' template = ERB.new(malicious_input_from_user) template.result 沙盒Ruby是非常困难的Ruby代码除了使

是否有任何方法可以禁止恶意输入在服务器中炮击和运行

例如,从用户接收模板化ERB输入时,如下面的代码段所示

请注意,这是一个简单的概念证明,因此可以在irb内的终端上复制它,但恶意输入可以是任意bash命令

require "erb"
malicious_input_from_user = '<%= `ls` %>'
template = ERB.new(malicious_input_from_user)
template.result

沙盒Ruby是非常困难的Ruby代码除了使用```之外,还有很多方法让您的生活变得困难。有各种各样的项目试图这样做,无论是通过预验证、破坏运行时环境、将所有内容包装在docker容器中,还是其他方式。我会把它们都当作最后的手段


最安全的选择是使用故意限制的模板语言,例如。

谢谢您的快速回答!我来看看液体。我仍然感到惊讶的是,没有一种构建方式可以做到这一点,我可以看到RoR应用程序如何很容易地从表单字段获取输入,并将其扩展为一个可能包含恶意输入的部分,如我的示例。我几乎不使用Ruby和RoR,所以也许人们只是不使用带有用户输入的ERB?不,他们没有;它直接与使用用户输入调用eval并行,这是一个坏主意,原因与从用户输入运行shell命令相同。。。一个shell命令可以做的任何事情,纯ruby脚本也可以。虽然看起来它已经有一段时间没有被维护了,但是你可以研究一下,也许它会给你一些想法。永远不要相信用户的输入。为什么您的用户会提交模板化ERB,为什么您会将其视为安全的?@engineersmnky这在ruby语言中更是一种好奇,RoR是如何工作的,对于类似的需求,我可以想到很多情况,不仅仅是用户提交模板化ERB,一个可能是RoR中的一部分,它使用来自表单的用户输入做一些事情,可能允许恶意输入,比如不使用准备好的语句进行输入;另一个可能是创建基于ruby的dsl语言,也可能允许恶意输入…@jugutier在这种情况下,它与RoR中的输入不完全一样。如果我们将您的示例扩展到,那么在模板呈现期间,输入实际上将被转义,以避免此类注入。提供了一个体面的高层次视角