【问题标题】:Upgrading to Rails 6.1.6.1 causes Psych::DisallowedClass: Tried to load unspecified class: Symbol升级到 Rails 6.1.6.1 导致 Psych::DisallowedClass: 试图加载未指定的类:符号
【发布时间】:2022-07-14 17:18:15
【问题描述】:

升级到 Rails 6.1.6.1 时,我开始在应用程序中收到以下错误:

Psych::DisallowedClass:
        Tried to load unspecified class: Symbol

这是由在 ActiveRecord 列上使用 Hash 序列化程序引起的,该列使用符号作为键或值:

serialize :parameters, Hash

【问题讨论】:

    标签: ruby-on-rails activerecord


    【解决方案1】:

    由于 Rails 中的以下安全更新而发生错误: https://discuss.rubyonrails.org/t/cve-2022-32224-possible-rce-escalation-bug-with-serialized-columns-in-active-record/81017

    Hash 序列化程序显然使用YAML.unsafe_load 加载数据,现在更改为YAML.safe_load。出于安全考虑,这种新方法默认不处理SymbolTime等数据类型。

    announcement 建议的解决方法是将序列化程序迁移到 JSON 或在序列化中仅使用安全数据类型(字符串、数字)。

    不过,有两种可配置的快速解决方法:

    config.active_record.use_yaml_unsafe_load
    

    不建议这样做,因为它基本上会恢复到旧的行为。

    config.active_record.yaml_column_permitted_classes = [Symbol]
    

    这允许序列化符号或其他不受支持(或不安全)的数据类型。

    【讨论】:

      猜你喜欢
      • 2022-07-14
      • 1970-01-01
      • 2015-12-25
      • 1970-01-01
      • 2017-02-07
      • 1970-01-01
      • 2016-03-06
      • 2015-01-26
      • 1970-01-01
      相关资源
      最近更新 更多