升级到Rails 6.1.6.1导致Psych::DisallowedClass: trying to load uns



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

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

这是由于在ActiveRecord列上使用Hash序列化器导致的,该列使用符号作为键或值:

serialize :parameters, Hash

由于Rails中的以下安全更新而发生错误:https://discuss.rubyonrails.org/t/cve - 2022 - 32224 -可能-远端控制设备升级错误- -序列化列在活跃——record/81017

Hash序列化器显然是用YAML.unsafe_load加载数据,现在改成了YAML.safe_load。出于安全原因,这个新方法默认不处理SymbolTime等数据类型。

公告建议的解决方法是将序列化器迁移到JSON,或者在序列化中只使用安全的数据类型(字符串,数字)。

然而,有两个可配置的快速解决方案:
config.active_record.use_yaml_unsafe_load

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

config.active_record.yaml_column_permitted_classes = [Symbol]

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

如果有人被困在这个问题上,上面建议的两个修复和Rails安全更新都没有为我在Rails5.2.8.1上工作,我一直有同样的错误(Tried to load unspecified class: Symbol),尽管允许它与application.rb中的config.active_record.yaml_column_permitted_classes = [Symbol]。最后,我不得不根据@ryan2johnson9的第一条评论调整unsafe_load选项以使其工作:

config.active_record.use_yaml_unsafe_load = true

我觉得这也很方便。

config.active_record.yaml_column_permitted_classes = [Symbol, Date]

相关内容

最新更新