GMO Flatt Security株式会社は10月3日、同社の「Kaigi on Rails 2025」出展ブースで出題したクイズについての解説記事を同社ブログで発表した。同社の大崎氏が執筆している。
同記事では、大崎氏が作問・出題した、実際に HackerOne に報告された脆弱性を元ネタとしたクイズについて解説している。
Ruby on Rails をバージョンアップした際に、Hash を JSON に変換する挙動が変わったことが原因でユーザー情報が漏えいしており、さらに「なぜユニットテストで検知できなかったのか」についてもレポートが公開されている。大崎氏は、同レポートを題材にクイズを作問している。
出題されたのは「次のコードを、Rails 7で実行すると、/users/:id のレスポンスはどのようなJSONになるでしょうか? (Ruby 3.3.1)」という問題で、下記4つの選択肢からの選択となる。
1.{"user":{"id":1,"name":"Takumi","secret":"SECRET"}}
2.{"user":{"id":1,"name":"Takumi"}}
3.{"user":{"id":1,"name":"Takumi","secret":"SECRET"}, "user":{"id":1,"name":"Takumi"}}
4.エラーになる
解説によると、Ruby on Rails 6.1 までは Hash を JSON に変換する際、シンボルキーは文字列キーと同一視されており、同じ名前のキーが複数存在する場合は後から追加されたキーで上書きされていたため、この場合の正解は 2.となるが、Ruby on Rails 7.1 では、シンボルキーと文字列キーを別のキーとして扱う仕様に変更されたため、両方のキーがそのまま JSON に出力されるようになったため、正解は 3. になるとのこと。