你有一个最典型的 ./config/environment.rb 文件吗?
我把它放在两个地方:在初始化器中和最后的“end”关键字之前。YMMV。
# ./config/environment.rb
Rails::Initializer.run do |config|
...
ActiveSupport::CoreExtensions::Hash::Conversions::XML_PARSING.delete('symbol')
ActiveSupport::CoreExtensions::Hash::Conversions::XML_PARSING.delete('yaml')
end
ActiveSupport::CoreExtensions::Hash::Conversions::XML_PARSING.delete('symbol')
ActiveSupport::CoreExtensions::Hash::Conversions::XML_PARSING.delete('yaml')
要验证它是否有效,请使用本地开发服务器为 rails 2.x 运行此命令:
curl -i -H "Content-Type: application/xml" -X POST \
-d '<id type="yaml">--- !ruby/object:ActionController::Base bar: 1</id>' \
http://localhost:3000
查看您的日志。如果 params[:id] 是一个对象,那么你很容易受到攻击。如果它只是一个字符串,那么你的修复工作。[感谢 HackerNews 用户提供所有这些信息]
当我部署到Passenger 生产时,它让我大吃一惊。我通过重新启动 Apache 解决了这个问题。您可能想对 Nginx 进行同样的尝试。
我不是 100% 确定这是最好的方法,或者涵盖所有情况。此处的其他任何人都可以添加或编辑此内容以提供帮助。祝你好运!