Rails渲染行为,传递和评估变量,是否安全?

时间:2014-11-27 21:17:39

标签: ruby-on-rails security renderpartial

我有一个视图,有很多相同的项目,只更改项目名称,以保持DRY我已经重构为部分。我的问题是,如果我将type_oil,一个字符串变量发送给partial,那么eval eval("#{type_oil}_path")是否会以任何方式向公众公开?这可能是一个安全问题吗?

视图/ CONTROLLER_NAME / oils.html.haml

#oils-content
  -# oils_list is a list of strings
  - oils_list.each do |oil|
    = render "controller_name/oils_item" , type_oil: oil

视图/ CONTROLLER_NAME / _oils_item.html.haml

.item
  %h2= t("oils.#{type_oil}.front_header")
  %p= t("oils.#{type_oil}.front_body")
  = link_to t("oils.#{type_oil}.link"),  eval("#{type_oil}_path")

1 个答案:

答案 0 :(得分:0)

它不会以任何方式暴露给公众。我认为你的困惑来自于你认为你视图中的Ruby是像HTML一样的前端语言(或者在这种情况下,HAML)。它不是。视图中的所有Ruby都可以动态创建HTTP响应的内容,因此在从服务器发送响应之前执行。