有没有办法限制ERB(Ruby)中的变量范围?

卡梅伦·普斯汀·奥斯汀

目前,我可以执行以下操作:

r = ERB.new('Hi there <%= name %>')
r.result(OpenStruct.new(name: 'Joan').instance_eval{ binding })
# Outputs 'Hi there Joan'

但是我也可以做到这一点(在具有Admin模型的Rails应用程序中运行):

r = ERB.new('<%= Admin.count %>')
r.result(OpenStruct.new.instance_eval{ binding })
# Outputs '10'

换句话说,它可以在调用评估的上下文中访问我的应用程序的所有变量。

有什么方法可以将变量的范围限制为仅在绑定中提供的变量,例如“名称”,什么都没有?我想在面向用户的模板工具中使用它。

我也尝试过这个(根据另一个SO问题):

class Namespace
  def initialize(hash)
    hash.each do |key, value|
      singleton_class.send(:define_method, key) { value }
    end 
  end

  def get_binding
    binding
  end
end

结果相同。

霍尔格·贾斯特

由于将ERB模板编译为普通的Ruby方法并按此方式执行,因此您不能限制对其的访问。通过元编程,模板的作者将能够访问正在运行的Ruby VM内的所有内容并编写任意的Ruby代码。

因此,即使您要调整传递给模板的变量绑定,也不会通过将Ruby嵌入到ERB中来限制恶意用户访问您的所有机密。

如果您确实希望将安全的模板语言暴露给用户,则应该看看Liquid(如Stefan在评论中所说)或Mustache,这两个目的都是为了提供一种安全的,不评估模板的环境。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

有没有办法限制ERB(Ruby)中的变量范围?

来自分类Dev

有没有办法限制Firebase中的注册

来自分类Dev

有没有办法在ISim中显示变量?

来自分类Dev

在highcharts中使用日期时,有没有办法限制x的范围?

来自分类Dev

在highcharts中使用日期时,有没有办法限制x的范围?

来自分类Dev

有没有办法限制/页面结果集

来自分类Dev

有没有办法限制总体CPU消耗?

来自分类Dev

有没有办法增加最近的文件限制?

来自分类Dev

有没有办法自动对模型应用限制?

来自分类Dev

有没有办法使变量超出其范围?-JAVA

来自分类Dev

有没有办法使用字符串引用范围变量?

来自分类Dev

有没有办法获得特定范围的单词?

来自分类Dev

有没有办法告诉 GCC 参数的范围?

来自分类Dev

有没有办法限制输入类型文件中的字符数

来自分类Dev

有没有办法限制Node(Express)中的速度和响应时间?

来自分类Dev

有没有办法限制Summernote中可用的段落样式?

来自分类Dev

有没有办法在python 3中设置int的限制

来自分类Dev

有没有办法限制Flutter中的堆栈跟踪信息

来自分类Dev

Specman e:有没有办法限制数字中设置的位数?

来自分类Dev

有没有办法增加CRM中的字段限制?

来自分类Dev

有没有办法在python 3中设置int的限制

来自分类Dev

有没有办法限制 Handlebars 输出中数字显示的小数位数?

来自分类Dev

有没有办法增加Swift中double类型的数量限制?

来自分类Dev

有没有办法限制序列化程序中的 together 值?

来自分类Dev

有没有办法限制用户可以在 Kubernetes 中创建的 Pod 数量?

来自分类Dev

有没有办法解决 flatbuffers 联合中 255 种类型的限制?

来自分类Dev

有没有办法限制使用 VBA 删除工作表中的行?

来自分类Dev

有没有办法在C中设置时间限制?

来自分类Dev

在 bash 中,有没有办法在变量中替换或嵌套变量?

Related 相关文章

  1. 1

    有没有办法限制ERB(Ruby)中的变量范围?

  2. 2

    有没有办法限制Firebase中的注册

  3. 3

    有没有办法在ISim中显示变量?

  4. 4

    在highcharts中使用日期时,有没有办法限制x的范围?

  5. 5

    在highcharts中使用日期时,有没有办法限制x的范围?

  6. 6

    有没有办法限制/页面结果集

  7. 7

    有没有办法限制总体CPU消耗?

  8. 8

    有没有办法增加最近的文件限制?

  9. 9

    有没有办法自动对模型应用限制?

  10. 10

    有没有办法使变量超出其范围?-JAVA

  11. 11

    有没有办法使用字符串引用范围变量?

  12. 12

    有没有办法获得特定范围的单词?

  13. 13

    有没有办法告诉 GCC 参数的范围?

  14. 14

    有没有办法限制输入类型文件中的字符数

  15. 15

    有没有办法限制Node(Express)中的速度和响应时间?

  16. 16

    有没有办法限制Summernote中可用的段落样式?

  17. 17

    有没有办法在python 3中设置int的限制

  18. 18

    有没有办法限制Flutter中的堆栈跟踪信息

  19. 19

    Specman e:有没有办法限制数字中设置的位数?

  20. 20

    有没有办法增加CRM中的字段限制?

  21. 21

    有没有办法在python 3中设置int的限制

  22. 22

    有没有办法限制 Handlebars 输出中数字显示的小数位数?

  23. 23

    有没有办法增加Swift中double类型的数量限制?

  24. 24

    有没有办法限制序列化程序中的 together 值?

  25. 25

    有没有办法限制用户可以在 Kubernetes 中创建的 Pod 数量?

  26. 26

    有没有办法解决 flatbuffers 联合中 255 种类型的限制?

  27. 27

    有没有办法限制使用 VBA 删除工作表中的行?

  28. 28

    有没有办法在C中设置时间限制?

  29. 29

    在 bash 中,有没有办法在变量中替换或嵌套变量?

热门标签

归档