升级到 Rails 6.1.6.1 会导致 Psych::DisallowedClass: 尝试加载未指定的类: Symbol

2024-01-02

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

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

这是由于使用HashActiveRecord 列上的序列化程序,它使用符号作为键或值:

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(使用前将#替换为@)

升级到 Rails 6.1.6.1 会导致 Psych::DisallowedClass: 尝试加载未指定的类: Symbol 的相关文章

随机推荐