【问题标题】:Trying to run "ruby code" which is coming database and saved by user from the frontend. (Ruby on Rails)尝试运行即将到来的数据库并由用户从前端保存的“ruby 代码”。 (Ruby on Rails)
【发布时间】:2021-09-15 00:10:30
【问题描述】:

目前我正在构建用户可以从客户端运行 ruby​​ 代码模块的应用程序 保存代码时,它会保存在数据库中,但是当我获取代码以显示文件时,代码只是打印它没有运行的字符串。

**<%=raw @post.frontend %>**这一行只运行css和html之类的前端,而不是ruby代码

例子:

**@post.frontend = 
"<% @fake_post.map do |simple| %>
<h1> <%= simple.description %> </h1>
<% end %>"**

输出:

**<% @fake_post.map do |simple| %>
<%= simple.description %>
<%= simple.description %>
<% end %>**

当我打印 之类的值时,它会抛出未定义的模板错误。

如果我遗漏了什么,请告诉我

【问题讨论】:

  • 有没有办法从服务器端运行它。
  • 您基本上是希望 Erb 进行它不做的双重评估。你不能只打印一个字符串,它必须被评估。需要注意的是,这是一个巨大的安全风险。
  • 是的,我们不能打印字符串。但是我们可以转换字符串以便打印。 .html.erb 文件以类似方式运行 erb 代码。有办法吗?

标签: ruby-on-rails ruby


【解决方案1】:

当您想将 ERB 评估为文本时,您需要通过 ERB 运行您的模板。

<%= ERB.new(@post.frontend).result_with_hash(fake_post: @fake_post) %>

您需要在模板中将 @fake_post 替换为 fake_post 才能正常工作。

注意:允许用户编辑 ERB 意味着您需要信任您的用户。 ERB 允许运行任何 Ruby 代码。用户可以添加代码来公开他们的数据库凭据或更改数据库中的数据或删除重要内容。

【讨论】:

  • 应该注意的是,ERB 可以运行任何 ruby​​ 代码。如果您这样做,您需要使用完整的沙盒或 101% 信任您的用户。更好的选择是使用更有限的模板语言,只进行简单的替换。
猜你喜欢
  • 2015-11-21
  • 1970-01-01
  • 2015-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-16
相关资源
最近更新 更多