升级到 Rails 6.1.6.1 时,我开始在应用程序中收到以下错误:
Psych::DisallowedClass:
Tried to load unspecified class: Symbol
这是由于使用Hash
ActiveRecord 列上的序列化程序,它使用符号作为键或值:
serialize :parameters, Hash
发生该错误的原因是 Rails 中的以下安全更新:https://discuss.rubyonrails.org/t/cve-2022-32224-possible-rce-escalation-bug-with-serialized-columns-in-active-record/81017 https://discuss.rubyonrails.org/t/cve-2022-32224-possible-rce-escalation-bug-with-serialized-columns-in-active-record/81017
The Hash
序列化器显然加载了数据YAML.unsafe_load
,现在改为YAML.safe_load
。这个新方法不处理诸如Symbol
or Time
出于安全原因默认。
解决方法为公告 https://discuss.rubyonrails.org/t/cve-2022-32224-possible-rce-escalation-bug-with-serialized-columns-in-active-record/81017建议将序列化程序迁移到 JSON 或在序列化中仅使用安全数据类型(字符串、数字)。
但是,有两种可配置的快速解决方法:
config.active_record.use_yaml_unsafe_load
不建议这样做,因为它基本上会恢复到旧的行为。
OR
config.active_record.yaml_column_permitted_classes = [Symbol]
它允许序列化符号或其他不受支持(或不安全)的数据类型。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)