1

environment.rb で ActionController::Base.param_parsers.delete(Mime::XML) を使用すると、それが壊れます。ファイルの en にある初期化ブロックの外に置きます。

私はnginx/passengerを使用していますが、面白いことに、開発インスタンスにActionController::Base.param_parsers.delete(Mime::XML)を追加すると問題は修正されますが、本番環境にデプロイするとすべてが壊れます。

これはレガシーコードであるため、Rails 3にアップグレードしたくありません。それを行うためのサイドプロジェクトに取り組んでいますが、今のところ、安全なアプリが必要です。

ありがとうございました。

4

1 に答える 1

2

ほとんど典型的な ./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 ユーザーに感謝します]

パッセンジャーのプロダクションにデプロイしたとき、それは私を驚かせました。Apacheを再起動することで解決しました。Nginx で同じことを試してみてください。

これが最善の方法であるか、すべてのケースをカバーしていると100%確信しているわけではありません。ここにいる他の誰でも、これを追加または編集して支援することができます。幸運を!

于 2013-01-15T22:27:59.960 に答える