You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby on Rails如何运行数据库中存储的用户提交Ruby ERB模板代码

问题原因

你遇到的问题本质是raw辅助方法仅会跳过HTML转义逻辑,不会将数据库中存储的包含ERB标签的字符串识别为Rails模板进行解析,因此<% %>这类ERB执行标签会原样输出到浏览器,不会触发Ruby代码执行。你尝试直接用puts输出时报模板不存在错误,是因为puts会将内容输出到服务器控制台而非视图层,返回值为nil,若你错误调用了渲染方法将字符串识别为模板路径,就会触发该错误。

解决方案

你可以手动调用Ruby内置的ERB库来解析模板字符串,同时需要将模板依赖的变量绑定到执行上下文:

  1. 先定义辅助渲染方法,可放在app/helpers/posts_helper.rb中:
def render_custom_erb(template_str, instance_vars = {})
  # 初始化ERB解析器
  erb = ERB.new(template_str)
  # 构造独立的空白执行上下文,避免泄露服务端数据
  execution_context = Object.new
  # 批量注入模板需要的实例变量
  instance_vars.each do |var_name, var_value|
    execution_context.instance_variable_set("@#{var_name}", var_value)
  end
  # 执行模板并返回渲染结果
  erb.result(execution_context.binding)
end
  1. 视图中调用该方法渲染,传入模板依赖的@fake_post变量:
<%= raw render_custom_erb(@post.frontend, fake_post: @fake_post) %>
重要安全提示

直接在服务端执行用户提交的Ruby代码属于极高风险操作,会导致远程代码执行(RCE)漏洞,攻击者可以通过构造恶意代码直接控制你的服务器、删除数据、窃取所有敏感信息。如果你的业务需要支持用户自定义动态逻辑,建议切换为前端JavaScript实现,或使用专用的Ruby沙箱环境隔离执行,避免直接执行未信任的用户代码。


内容的提问来源于stack exchange,提问作者Pradeep Rayapudi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 10:12:00