actionpack 5.2.8.1 → 6.1.6.1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of actionpack might be problematic. Click here for more details.

Files changed (155) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +383 -346
  3. data/MIT-LICENSE +1 -2
  4. data/README.rdoc +4 -3
  5. data/lib/abstract_controller/base.rb +38 -4
  6. data/lib/abstract_controller/caching/fragments.rb +6 -22
  7. data/lib/abstract_controller/caching.rb +1 -1
  8. data/lib/abstract_controller/callbacks.rb +14 -2
  9. data/lib/abstract_controller/collector.rb +5 -4
  10. data/lib/abstract_controller/helpers.rb +106 -90
  11. data/lib/abstract_controller/railties/routes_helpers.rb +17 -1
  12. data/lib/abstract_controller/rendering.rb +9 -9
  13. data/lib/abstract_controller/translation.rb +11 -5
  14. data/lib/abstract_controller.rb +1 -0
  15. data/lib/action_controller/api.rb +4 -3
  16. data/lib/action_controller/base.rb +6 -9
  17. data/lib/action_controller/caching.rb +1 -3
  18. data/lib/action_controller/log_subscriber.rb +10 -7
  19. data/lib/action_controller/metal/basic_implicit_render.rb +1 -1
  20. data/lib/action_controller/metal/conditional_get.rb +19 -5
  21. data/lib/action_controller/metal/content_security_policy.rb +1 -2
  22. data/lib/action_controller/metal/cookies.rb +3 -1
  23. data/lib/action_controller/metal/data_streaming.rb +6 -7
  24. data/lib/action_controller/metal/default_headers.rb +17 -0
  25. data/lib/action_controller/metal/etag_with_template_digest.rb +4 -6
  26. data/lib/action_controller/metal/exceptions.rb +56 -2
  27. data/lib/action_controller/metal/flash.rb +5 -5
  28. data/lib/action_controller/metal/head.rb +7 -4
  29. data/lib/action_controller/metal/helpers.rb +14 -5
  30. data/lib/action_controller/metal/http_authentication.rb +25 -23
  31. data/lib/action_controller/metal/implicit_render.rb +5 -15
  32. data/lib/action_controller/metal/instrumentation.rb +13 -14
  33. data/lib/action_controller/metal/live.rb +39 -32
  34. data/lib/action_controller/metal/logging.rb +20 -0
  35. data/lib/action_controller/metal/mime_responds.rb +19 -4
  36. data/lib/action_controller/metal/parameter_encoding.rb +35 -4
  37. data/lib/action_controller/metal/params_wrapper.rb +32 -22
  38. data/lib/action_controller/metal/permissions_policy.rb +46 -0
  39. data/lib/action_controller/metal/redirecting.rb +6 -6
  40. data/lib/action_controller/metal/renderers.rb +4 -4
  41. data/lib/action_controller/metal/rendering.rb +8 -3
  42. data/lib/action_controller/metal/request_forgery_protection.rb +26 -49
  43. data/lib/action_controller/metal/rescue.rb +1 -1
  44. data/lib/action_controller/metal/streaming.rb +0 -1
  45. data/lib/action_controller/metal/strong_parameters.rb +168 -59
  46. data/lib/action_controller/metal/url_for.rb +1 -1
  47. data/lib/action_controller/metal.rb +10 -8
  48. data/lib/action_controller/railties/helpers.rb +1 -1
  49. data/lib/action_controller/renderer.rb +37 -13
  50. data/lib/action_controller/template_assertions.rb +1 -1
  51. data/lib/action_controller/test_case.rb +71 -63
  52. data/lib/action_controller.rb +7 -4
  53. data/lib/action_dispatch/http/cache.rb +31 -27
  54. data/lib/action_dispatch/http/content_disposition.rb +45 -0
  55. data/lib/action_dispatch/http/content_security_policy.rb +34 -18
  56. data/lib/action_dispatch/http/filter_parameters.rb +9 -8
  57. data/lib/action_dispatch/http/filter_redirect.rb +2 -3
  58. data/lib/action_dispatch/http/headers.rb +4 -4
  59. data/lib/action_dispatch/http/mime_negotiation.rb +26 -13
  60. data/lib/action_dispatch/http/mime_type.rb +43 -24
  61. data/lib/action_dispatch/http/parameters.rb +14 -23
  62. data/lib/action_dispatch/http/permissions_policy.rb +173 -0
  63. data/lib/action_dispatch/http/request.rb +45 -22
  64. data/lib/action_dispatch/http/response.rb +45 -25
  65. data/lib/action_dispatch/http/upload.rb +9 -1
  66. data/lib/action_dispatch/http/url.rb +82 -82
  67. data/lib/action_dispatch/journey/formatter.rb +55 -31
  68. data/lib/action_dispatch/journey/gtg/builder.rb +22 -37
  69. data/lib/action_dispatch/journey/gtg/simulator.rb +8 -7
  70. data/lib/action_dispatch/journey/gtg/transition_table.rb +6 -5
  71. data/lib/action_dispatch/journey/nfa/dot.rb +0 -11
  72. data/lib/action_dispatch/journey/nodes/node.rb +13 -11
  73. data/lib/action_dispatch/journey/parser.rb +13 -13
  74. data/lib/action_dispatch/journey/parser.y +1 -1
  75. data/lib/action_dispatch/journey/path/pattern.rb +19 -21
  76. data/lib/action_dispatch/journey/route.rb +10 -20
  77. data/lib/action_dispatch/journey/router/utils.rb +14 -12
  78. data/lib/action_dispatch/journey/router.rb +26 -34
  79. data/lib/action_dispatch/journey/routes.rb +0 -2
  80. data/lib/action_dispatch/journey/scanner.rb +10 -4
  81. data/lib/action_dispatch/journey/visitors.rb +1 -4
  82. data/lib/action_dispatch/journey.rb +0 -2
  83. data/lib/action_dispatch/middleware/actionable_exceptions.rb +46 -0
  84. data/lib/action_dispatch/middleware/callbacks.rb +2 -4
  85. data/lib/action_dispatch/middleware/cookies.rb +128 -109
  86. data/lib/action_dispatch/middleware/debug_exceptions.rb +43 -66
  87. data/lib/action_dispatch/middleware/debug_locks.rb +5 -5
  88. data/lib/action_dispatch/middleware/debug_view.rb +66 -0
  89. data/lib/action_dispatch/middleware/exception_wrapper.rb +75 -30
  90. data/lib/action_dispatch/middleware/flash.rb +1 -1
  91. data/lib/action_dispatch/middleware/host_authorization.rb +170 -0
  92. data/lib/action_dispatch/middleware/public_exceptions.rb +6 -3
  93. data/lib/action_dispatch/middleware/remote_ip.rb +14 -16
  94. data/lib/action_dispatch/middleware/request_id.rb +5 -6
  95. data/lib/action_dispatch/middleware/session/abstract_store.rb +2 -3
  96. data/lib/action_dispatch/middleware/session/cookie_store.rb +3 -9
  97. data/lib/action_dispatch/middleware/show_exceptions.rb +13 -2
  98. data/lib/action_dispatch/middleware/ssl.rb +20 -15
  99. data/lib/action_dispatch/middleware/stack.rb +56 -2
  100. data/lib/action_dispatch/middleware/static.rb +153 -93
  101. data/lib/action_dispatch/middleware/templates/rescues/_actions.html.erb +13 -0
  102. data/lib/action_dispatch/middleware/templates/rescues/_actions.text.erb +0 -0
  103. data/lib/action_dispatch/middleware/templates/rescues/_message_and_suggestions.html.erb +22 -0
  104. data/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb +3 -1
  105. data/lib/action_dispatch/middleware/templates/rescues/_request_and_response.text.erb +1 -1
  106. data/lib/action_dispatch/middleware/templates/rescues/_source.html.erb +4 -2
  107. data/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb +45 -35
  108. data/lib/action_dispatch/middleware/templates/rescues/blocked_host.html.erb +7 -0
  109. data/lib/action_dispatch/middleware/templates/rescues/blocked_host.text.erb +5 -0
  110. data/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb +23 -4
  111. data/lib/action_dispatch/middleware/templates/rescues/diagnostics.text.erb +1 -1
  112. data/lib/action_dispatch/middleware/templates/rescues/invalid_statement.html.erb +6 -3
  113. data/lib/action_dispatch/middleware/templates/rescues/invalid_statement.text.erb +4 -1
  114. data/lib/action_dispatch/middleware/templates/rescues/layout.erb +104 -8
  115. data/lib/action_dispatch/middleware/templates/rescues/missing_exact_template.html.erb +19 -0
  116. data/lib/action_dispatch/middleware/templates/rescues/missing_exact_template.text.erb +3 -0
  117. data/lib/action_dispatch/middleware/templates/rescues/missing_template.html.erb +2 -2
  118. data/lib/action_dispatch/middleware/templates/rescues/routing_error.html.erb +1 -1
  119. data/lib/action_dispatch/middleware/templates/rescues/template_error.html.erb +2 -2
  120. data/lib/action_dispatch/middleware/templates/rescues/unknown_action.html.erb +1 -1
  121. data/lib/action_dispatch/middleware/templates/routes/_table.html.erb +24 -1
  122. data/lib/action_dispatch/railtie.rb +8 -2
  123. data/lib/action_dispatch/request/session.rb +11 -10
  124. data/lib/action_dispatch/request/utils.rb +26 -2
  125. data/lib/action_dispatch/routing/inspector.rb +100 -52
  126. data/lib/action_dispatch/routing/mapper.rb +155 -103
  127. data/lib/action_dispatch/routing/polymorphic_routes.rb +13 -15
  128. data/lib/action_dispatch/routing/redirection.rb +4 -4
  129. data/lib/action_dispatch/routing/route_set.rb +71 -69
  130. data/lib/action_dispatch/routing/url_for.rb +2 -2
  131. data/lib/action_dispatch/routing.rb +21 -20
  132. data/lib/action_dispatch/system_test_case.rb +60 -11
  133. data/lib/action_dispatch/system_testing/browser.rb +53 -16
  134. data/lib/action_dispatch/system_testing/driver.rb +11 -3
  135. data/lib/action_dispatch/system_testing/test_helpers/screenshot_helper.rb +49 -7
  136. data/lib/action_dispatch/system_testing/test_helpers/setup_and_teardown.rb +8 -10
  137. data/lib/action_dispatch/testing/assertion_response.rb +0 -1
  138. data/lib/action_dispatch/testing/assertions/response.rb +4 -7
  139. data/lib/action_dispatch/testing/assertions/routing.rb +20 -8
  140. data/lib/action_dispatch/testing/assertions.rb +1 -1
  141. data/lib/action_dispatch/testing/integration.rb +60 -28
  142. data/lib/action_dispatch/testing/request_encoder.rb +2 -2
  143. data/lib/action_dispatch/testing/test_process.rb +32 -4
  144. data/lib/action_dispatch/testing/test_request.rb +3 -3
  145. data/lib/action_dispatch/testing/test_response.rb +4 -32
  146. data/lib/action_dispatch.rb +9 -3
  147. data/lib/action_pack/gem_version.rb +3 -3
  148. data/lib/action_pack.rb +1 -1
  149. metadata +34 -21
  150. data/lib/action_controller/metal/force_ssl.rb +0 -99
  151. data/lib/action_dispatch/http/parameter_filter.rb +0 -86
  152. data/lib/action_dispatch/journey/nfa/builder.rb +0 -78
  153. data/lib/action_dispatch/journey/nfa/simulator.rb +0 -49
  154. data/lib/action_dispatch/journey/nfa/transition_table.rb +0 -120
  155. data/lib/action_dispatch/system_testing/test_helpers/undef_methods.rb +0 -26
data/CHANGELOG.md CHANGED
@@ -1,589 +1,626 @@
1
- ## Rails 5.2.8.1 (July 12, 2022) ##
1
+ ## Rails 6.1.6.1 (July 12, 2022) ##
2
2
 
3
3
  * No changes.
4
4
 
5
5
 
6
- ## Rails 5.2.8 (May 09, 2022) ##
6
+ ## Rails 6.1.5.1 (April 26, 2022) ##
7
7
 
8
- * No changes.
8
+ * Allow Content Security Policy DSL to generate for API responses.
9
9
 
10
+ *Tim Wade*
10
11
 
11
- ## Rails 5.2.7.1 (April 26, 2022) ##
12
+ ## Rails 6.1.5 (March 09, 2022) ##
12
13
 
13
- * Allow Content Security Policy DSL to generate for API responses.
14
+ * Fix `content_security_policy` returning invalid directives.
14
15
 
15
- *Tim Wade*
16
+ Directives such as `self`, `unsafe-eval` and few others were not
17
+ single quoted when the directive was the result of calling a lambda
18
+ returning an array.
16
19
 
17
- ## Rails 5.2.7 (March 10, 2022) ##
20
+ ```ruby
21
+ content_security_policy do |policy|
22
+ policy.frame_ancestors lambda { [:self, "https://example.com"] }
23
+ end
24
+ ```
18
25
 
19
- * No changes.
26
+ With this fix the policy generated from above will now be valid.
20
27
 
21
- ## Rails 5.2.6.3 (March 08, 2022) ##
28
+ *Edouard Chin*
22
29
 
23
- * No changes.
30
+ * Update `HostAuthorization` middleware to render debug info only
31
+ when `config.consider_all_requests_local` is set to true.
24
32
 
33
+ Also, blocked host info is always logged with level `error`.
25
34
 
26
- ## Rails 5.2.6.2 (February 11, 2022) ##
35
+ Fixes #42813.
27
36
 
28
- * No changes.
37
+ *Nikita Vyrko*
29
38
 
39
+ * Dup arrays that get "converted".
30
40
 
31
- ## Rails 5.2.6.1 (February 11, 2022) ##
41
+ Fixes #43681.
32
42
 
33
- * Under certain circumstances, the middleware isn't informed that the
34
- response body has been fully closed which result in request state not
35
- being fully reset before the next request
43
+ *Aaron Patterson*
36
44
 
37
- [CVE-2022-23633]
45
+ * Don't show deprecation warning for equal paths.
38
46
 
47
+ *Anton Rieder*
39
48
 
40
- ## Rails 5.2.6 (May 05, 2021) ##
49
+ * Fix crash in `ActionController::Instrumentation` with invalid HTTP formats.
41
50
 
42
- * Accept base64_urlsafe CSRF tokens to make forward compatible.
51
+ Fixes #43094.
43
52
 
44
- Base64 strict-encoded CSRF tokens are not inherently websafe, which makes
45
- them difficult to deal with. For example, the common practice of sending
46
- the CSRF token to a browser in a client-readable cookie does not work properly
47
- out of the box: the value has to be url-encoded and decoded to survive transport.
53
+ *Alex Ghiculescu*
48
54
 
49
- In this version, we generate Base64 urlsafe-encoded CSRF tokens, which are inherently
50
- safe to transport. Validation accepts both urlsafe tokens, and strict-encoded
51
- tokens for backwards compatibility.
55
+ * Add fallback host for SystemTestCase driven by RackTest.
52
56
 
53
- How the tokes are encoded is controllr by the `action_controller.urlsafe_csrf_tokens`
54
- config.
57
+ Fixes #42780.
55
58
 
56
- In Rails 5.2.5, the CSRF token format was accidentally changed to urlsafe-encoded.
59
+ *Petrik de Heus*
57
60
 
58
- **Atention**: If you already upgraded your application to 5.2.5, set the config
59
- `urlsafe_csrf_tokens` to `true`, otherwise your form submission will start to fail
60
- during the deploy of this new version.
61
+ * Add more detail about what hosts are allowed.
61
62
 
62
- ```ruby
63
- Rails.application.config.action_controller.urlsafe_csrf_tokens = true
64
- ```
63
+ *Alex Ghiculescu*
65
64
 
66
- If you are upgrading from 5.2.4.x, you don't need to change this configuration.
67
65
 
68
- *Scott Blum*, *Étienne Barrié*
66
+ ## Rails 6.1.4.7 (March 08, 2022) ##
67
+
68
+ * No changes.
69
69
 
70
70
 
71
- ## Rails 5.2.5 (March 26, 2021) ##
71
+ ## Rails 6.1.4.6 (February 11, 2022) ##
72
72
 
73
73
  * No changes.
74
74
 
75
75
 
76
- ## Rails 5.2.4.6 (May 05, 2021) ##
76
+ ## Rails 6.1.4.5 (February 11, 2022) ##
77
77
 
78
- * Prevent regex DoS in HTTP token authentication
79
- CVE-2021-22904
78
+ * Under certain circumstances, the middleware isn't informed that the
79
+ response body has been fully closed which result in request state not
80
+ being fully reset before the next request
80
81
 
81
- * Prevent string polymorphic route arguments.
82
+ [CVE-2022-23633]
82
83
 
83
- `url_for` supports building polymorphic URLs via an array
84
- of arguments (usually symbols and records). If a developer passes a
85
- user input array, strings can result in unwanted route helper calls.
86
84
 
87
- CVE-2021-22885
85
+ ## Rails 6.1.4.4 (December 15, 2021) ##
88
86
 
89
- *Gannon McGibbon*
87
+ * Fix issue with host protection not allowing host with port in development.
90
88
 
91
- ## Rails 5.2.4.5 (February 10, 2021) ##
92
89
 
93
- * No changes.
90
+ ## Rails 6.1.4.3 (December 14, 2021) ##
94
91
 
92
+ * Fix issue with host protection not allowing localhost in development.
95
93
 
96
- ## Rails 5.2.4.4 (September 09, 2020) ##
97
94
 
98
- * No changes.
95
+ ## Rails 6.1.4.2 (December 14, 2021) ##
99
96
 
97
+ * Fix X_FORWARDED_HOST protection. [CVE-2021-44528]
100
98
 
101
- ## Rails 5.2.4.3 (May 18, 2020) ##
99
+ ## Rails 6.1.4.1 (August 19, 2021) ##
102
100
 
103
- * [CVE-2020-8166] HMAC raw CSRF token before masking it, so it cannot be used to reconstruct a per-form token
101
+ * [CVE-2021-22942] Fix possible open redirect in Host Authorization middleware.
104
102
 
105
- * [CVE-2020-8164] Return self when calling #each, #each_pair, and #each_value instead of the raw @parameters hash
103
+ Specially crafted "X-Forwarded-Host" headers in combination with certain
104
+ "allowed host" formats can cause the Host Authorization middleware in Action
105
+ Pack to redirect users to a malicious website.
106
106
 
107
+ ## Rails 6.1.4 (June 24, 2021) ##
107
108
 
108
- ## Rails 5.2.4.2 (March 19, 2020) ##
109
+ * Ignore file fixtures on `db:fixtures:load`
109
110
 
110
- * No changes.
111
+ *Kevin Sjöberg*
111
112
 
113
+ * Fix ActionController::Live controller test deadlocks by removing the body buffer size limit for tests.
112
114
 
113
- ## Rails 5.2.4.1 (December 18, 2019) ##
115
+ *Dylan Thacker-Smith*
114
116
 
115
- * Fix possible information leak / session hijacking vulnerability.
117
+ * Correctly place optional path parameter booleans.
116
118
 
117
- The `ActionDispatch::Session::MemcacheStore` is still vulnerable given it requires the
118
- gem dalli to be updated as well.
119
+ Previously, if you specify a url parameter that is part of the path as false it would include that part
120
+ of the path as parameter for example:
119
121
 
120
- _Breaking changes:_
121
- * `session.id` now returns an instance of `Rack::Session::SessionId` and not a String (use `session.id.public_id` to restore the old behaviour, see #38063)
122
- * Accessing the session id using `session[:session_id]`/`session['session_id']` no longer works with
123
- ruby 2.2 (see https://github.com/rails/rails/commit/2a52a38cb51b65d71cf91fc960777213cf96f962#commitcomment-37929811)
122
+ ```
123
+ get "(/optional/:optional_id)/things" => "foo#foo", as: :things
124
+ things_path(optional_id: false) # => /things?optional_id=false
125
+ ```
124
126
 
125
- CVE-2019-16782.
127
+ After this change, true and false will be treated the same when used as optional path parameters. Meaning now:
128
+
129
+ ```
130
+ get '(this/:my_bool)/that' as: :that
126
131
 
132
+ that_path(my_bool: true) # => `/this/true/that`
133
+ that_path(my_bool: false) # => `/this/false/that`
134
+ ```
127
135
 
128
- ## Rails 5.2.4 (November 27, 2019) ##
136
+ *Adam Hess*
129
137
 
130
- * No changes.
138
+ * Add support for 'private, no-store' Cache-Control headers.
131
139
 
140
+ Previously, 'no-store' was exclusive; no other directives could be specified.
132
141
 
133
- ## Rails 5.2.3 (March 27, 2019) ##
142
+ *Alex Smith*
134
143
 
135
- * Allow using `public` and `no-cache` together in the the Cache Control header.
136
144
 
137
- Before this change, even if `public` was specified in the Cache Control header,
138
- it was excluded when `no-cache` was included. This change preserves the
139
- `public` value as is.
145
+ ## Rails 6.1.3.2 (May 05, 2021) ##
140
146
 
141
- Fixes #34780.
147
+ * Prevent open redirects by correctly escaping the host allow list
148
+ CVE-2021-22903
142
149
 
143
- *Yuji Yaginuma*
150
+ * Prevent catastrophic backtracking during mime parsing
151
+ CVE-2021-22902
144
152
 
145
- * Allow `nil` params for `ActionController::TestCase`.
153
+ * Prevent regex DoS in HTTP token authentication
154
+ CVE-2021-22904
146
155
 
147
- *Ryo Nakamura*
156
+ * Prevent string polymorphic route arguments.
148
157
 
158
+ `url_for` supports building polymorphic URLs via an array
159
+ of arguments (usually symbols and records). If a developer passes a
160
+ user input array, strings can result in unwanted route helper calls.
161
+
162
+ CVE-2021-22885
149
163
 
150
- ## Rails 5.2.2.1 (March 11, 2019) ##
164
+ *Gannon McGibbon*
165
+
166
+ ## Rails 6.1.3.1 (March 26, 2021) ##
151
167
 
152
168
  * No changes.
153
169
 
154
170
 
155
- ## Rails 5.2.2 (December 04, 2018) ##
171
+ ## Rails 6.1.3 (February 17, 2021) ##
156
172
 
157
- * Reset Capybara sessions if failed system test screenshot raising an exception.
173
+ * Re-define routes when not set correctly via inheritance.
158
174
 
159
- Reset Capybara sessions if `take_failed_screenshot` raise exception
160
- in system test `after_teardown`.
175
+ *John Hawthorn*
161
176
 
162
- *Maxim Perepelitsa*
163
177
 
164
- * Use request object for context if there's no controller
178
+ ## Rails 6.1.2.1 (February 10, 2021) ##
165
179
 
166
- There is no controller instance when using a redirect route or a
167
- mounted rack application so pass the request object as the context
168
- when resolving dynamic CSP sources in this scenario.
180
+ * Prevent open redirect when allowed host starts with a dot
169
181
 
170
- Fixes #34200.
182
+ [CVE-2021-22881]
171
183
 
172
- *Andrew White*
184
+ Thanks to @tktech (https://hackerone.com/tktech) for reporting this
185
+ issue and the patch!
173
186
 
174
- * Apply mapping to symbols returned from dynamic CSP sources
187
+ *Aaron Patterson*
175
188
 
176
- Previously if a dynamic source returned a symbol such as :self it
177
- would be converted to a string implicity, e.g:
178
189
 
179
- policy.default_src -> { :self }
190
+ ## Rails 6.1.2 (February 09, 2021) ##
180
191
 
181
- would generate the header:
192
+ * Fix error in `ActionController::LogSubscriber` that would happen when throwing inside a controller action.
182
193
 
183
- Content-Security-Policy: default-src self
194
+ *Janko Marohnić*
184
195
 
185
- and now it generates:
196
+ * Fix `fixture_file_upload` deprecation when `file_fixture_path` is a relative path.
186
197
 
187
- Content-Security-Policy: default-src 'self'
198
+ *Eugene Kenny*
188
199
 
189
- *Andrew White*
190
200
 
191
- * Fix `rails routes -c` for controller name consists of multiple word.
201
+ ## Rails 6.1.1 (January 07, 2021) ##
192
202
 
193
- *Yoshiyuki Kinjo*
203
+ * Fix nil translation key lookup in controllers/
194
204
 
195
- * Call the `#redirect_to` block in controller context.
205
+ *Jan Klimo*
196
206
 
197
- *Steven Peckins*
207
+ * Quietly handle unknown HTTP methods in Action Dispatch SSL middleware.
198
208
 
209
+ *Alex Robbin*
199
210
 
200
- ## Rails 5.2.1.1 (November 27, 2018) ##
211
+ * Change the request method to a `GET` when passing failed requests down to `config.exceptions_app`.
201
212
 
202
- * No changes.
213
+ *Alex Robbin*
203
214
 
204
215
 
205
- ## Rails 5.2.1 (August 07, 2018) ##
216
+ ## Rails 6.1.0 (December 09, 2020) ##
206
217
 
207
- * Prevent `?null=` being passed on JSON encoded test requests.
218
+ * Support for the HTTP header `Feature-Policy` has been revised to reflect
219
+ its [rename](https://github.com/w3c/webappsec-permissions-policy/pull/379) to [`Permissions-Policy`](https://w3c.github.io/webappsec-permissions-policy/#permissions-policy-http-header-field).
208
220
 
209
- `RequestEncoder#encode_params` won't attempt to parse params if
210
- there are none.
221
+ ```ruby
222
+ Rails.application.config.permissions_policy do |p|
223
+ p.camera :none
224
+ p.gyroscope :none
225
+ p.microphone :none
226
+ p.usb :none
227
+ p.fullscreen :self
228
+ p.payment :self, "https://secure-example.com"
229
+ end
230
+ ```
211
231
 
212
- So call like this will no longer append a `?null=` query param.
232
+ *Julien Grillot*
213
233
 
214
- get foos_url, as: :json
234
+ * Allow `ActionDispatch::HostAuthorization` to exclude specific requests.
215
235
 
216
- *Alireza Bashiri*
236
+ Host Authorization checks can be skipped for specific requests. This allows for health check requests to be permitted for requests with missing or non-matching host headers.
217
237
 
218
- * Ensure `ActionController::Parameters#transform_values` and
219
- `ActionController::Parameters#transform_values!` converts hashes into
220
- parameters.
238
+ *Chris Bisnett*
221
239
 
222
- *Kevin Sjöberg*
240
+ * Add `config.action_dispatch.request_id_header` to allow changing the name of
241
+ the unique X-Request-Id header
223
242
 
224
- * Fix strong parameters `permit!` with nested arrays.
243
+ *Arlston Fernandes*
225
244
 
226
- Given:
227
- ```
228
- params = ActionController::Parameters.new(nested_arrays: [[{ x: 2, y: 3 }, { x: 21, y: 42 }]])
229
- params.permit!
230
- ```
245
+ * Deprecate `config.action_dispatch.return_only_media_type_on_content_type`.
231
246
 
232
- `params[:nested_arrays][0][0].permitted?` will now return `true` instead of `false`.
247
+ *Rafael Mendonça França*
233
248
 
234
- *Steve Hull*
249
+ * Change `ActionDispatch::Response#content_type` to return the full Content-Type header.
235
250
 
236
- * Reset `RAW_POST_DATA` and `CONTENT_LENGTH` request environment between test requests in
237
- `ActionController::TestCase` subclasses.
251
+ *Rafael Mendonça França*
238
252
 
239
- *Eugene Kenny*
253
+ * Remove deprecated `ActionDispatch::Http::ParameterFilter`.
240
254
 
241
- * Output only one Content-Security-Policy nonce header value per request.
255
+ *Rafael Mendonça França*
242
256
 
243
- Fixes #32597.
257
+ * Added support for exclusive no-store Cache-Control header.
244
258
 
245
- *Andrey Novikov*, *Andrew White*
259
+ If `no-store` is set on Cache-Control header it is exclusive (all other cache directives are dropped).
246
260
 
247
- * Only disable GPUs for headless Chrome on Windows.
261
+ *Chris Kruger*
248
262
 
249
- It is not necessary anymore for Linux and macOS machines.
263
+ * Catch invalid UTF-8 parameters for POST requests and respond with BadRequest.
250
264
 
251
- https://bugs.chromium.org/p/chromium/issues/detail?id=737678#c1
265
+ Additionally, perform `#set_binary_encoding` in `ActionDispatch::Http::Request#GET` and
266
+ `ActionDispatch::Http::Request#POST` prior to validating encoding.
252
267
 
253
- *Stefan Wrobel*
268
+ *Adrianna Chang*
254
269
 
255
- * Fix system tests transactions not closed between examples.
270
+ * Allow `assert_recognizes` routing assertions to work on mounted root routes.
256
271
 
257
- *Sergey Tarasov*
272
+ *Gannon McGibbon*
258
273
 
274
+ * Change default redirection status code for non-GET/HEAD requests to 308 Permanent Redirect for `ActionDispatch::SSL`.
259
275
 
260
- ## Rails 5.2.0 (April 09, 2018) ##
276
+ *Alan Tan*, *Oz Ben-David*
261
277
 
262
- * Check exclude before flagging cookies as secure.
278
+ * Fix `follow_redirect!` to follow redirection with same HTTP verb when following
279
+ a 308 redirection.
263
280
 
264
- *Catherine Khuu*
281
+ *Alan Tan*
265
282
 
266
- * Always yield a CSP policy instance from `content_security_policy`
283
+ * When multiple domains are specified for a cookie, a domain will now be
284
+ chosen only if it is equal to or is a superdomain of the request host.
267
285
 
268
- This allows a controller action to enable the policy individually
269
- for a controller and/or specific actions.
286
+ *Jonathan Hefner*
270
287
 
271
- *Andrew White*
288
+ * `ActionDispatch::Static` handles precompiled Brotli (.br) files.
272
289
 
273
- * Add the ability to disable the global CSP in a controller, e.g:
290
+ Adds to existing support for precompiled gzip (.gz) files.
291
+ Brotli files are preferred due to much better compression.
274
292
 
275
- class LegacyPagesController < ApplicationController
276
- content_security_policy false, only: :index
277
- end
293
+ When the browser requests /some.js with `Accept-Encoding: br`,
294
+ we check for public/some.js.br and serve that file, if present, with
295
+ `Content-Encoding: br` and `Vary: Accept-Encoding` headers.
278
296
 
279
- *Andrew White*
297
+ *Ryan Edward Hall*, *Jeremy Daer*
280
298
 
281
- * Add alias method `to_hash` to `to_h` for `cookies`.
282
- Add alias method `to_h` to `to_hash` for `session`.
299
+ * Add raise_on_missing_translations support for controllers.
283
300
 
284
- *Igor Kasyanchuk*
301
+ This configuration determines whether an error should be raised for missing translations.
302
+ It can be enabled through `config.i18n.raise_on_missing_translations`. Note that described
303
+ configuration also affects raising error for missing translations in views.
285
304
 
286
- * Update the default HSTS max-age value to 31536000 seconds (1 year)
287
- to meet the minimum max-age requirement for https://hstspreload.org/.
305
+ *fatkodima*
288
306
 
289
- *Grant Bourque*
307
+ * Added `compact` and `compact!` to `ActionController::Parameters`.
290
308
 
291
- * Add support for automatic nonce generation for Rails UJS.
309
+ *Eugene Kenny*
292
310
 
293
- Because the UJS library creates a script tag to process responses it
294
- normally requires the script-src attribute of the content security
295
- policy to include 'unsafe-inline'.
311
+ * Calling `each_pair` or `each_value` on an `ActionController::Parameters`
312
+ without passing a block now returns an enumerator.
296
313
 
297
- To work around this we generate a per-request nonce value that is
298
- embedded in a meta tag in a similar fashion to how CSRF protection
299
- embeds its token in a meta tag. The UJS library can then read the
300
- nonce value and set it on the dynamically generated script tag to
301
- enable it to execute without needing 'unsafe-inline' enabled.
314
+ *Eugene Kenny*
302
315
 
303
- Nonce generation isn't 100% safe - if your script tag is including
304
- user generated content in someway then it may be possible to exploit
305
- an XSS vulnerability which can take advantage of the nonce. It is
306
- however an improvement on a blanket permission for inline scripts.
316
+ * `fixture_file_upload` now uses path relative to `file_fixture_path`
307
317
 
308
- It is also possible to use the nonce within your own script tags by
309
- using `nonce: true` to set the nonce value on the tag, e.g
318
+ Previously the path had to be relative to `fixture_path`.
319
+ You can change your existing code as follow:
310
320
 
311
- <%= javascript_tag nonce: true do %>
312
- alert('Hello, World!');
313
- <% end %>
321
+ ```ruby
322
+ # Before
323
+ fixture_file_upload('files/dog.png')
314
324
 
315
- Fixes #31689.
325
+ # After
326
+ fixture_file_upload('dog.png')
327
+ ```
316
328
 
317
- *Andrew White*
329
+ *Edouard Chin*
318
330
 
319
- * Matches behavior of `Hash#each` in `ActionController::Parameters#each`.
331
+ * Remove deprecated `force_ssl` at the controller level.
320
332
 
321
- Rails 5.0 introduced a bug when looping through controller params using `each`. Only the keys of params hash were passed to the block, e.g.
333
+ *Rafael Mendonça França*
322
334
 
323
- # Parameters: {"param"=>"1", "param_two"=>"2"}
324
- def index
325
- params.each do |name|
326
- puts name
327
- end
328
- end
335
+ * The +helper+ class method for controllers loads helper modules specified as
336
+ strings/symbols with `String#constantize` instead of `require_dependency`.
329
337
 
330
- # Prints
331
- # param
332
- # param_two
338
+ Remember that support for strings/symbols is only a convenient API. You can
339
+ always pass a module object:
333
340
 
334
- In Rails 5.2 the bug has been fixed and name will be an array (which was the behavior for all versions prior to 5.0), instead of a string.
341
+ ```ruby
342
+ helper UtilsHelper
343
+ ```
335
344
 
336
- To fix the code above simply change as per example below:
345
+ which is recommended because it is simple and direct. When a string/symbol
346
+ is received, `helper` just manipulates and inflects the argument to obtain
347
+ that same module object.
337
348
 
338
- # Parameters: {"param"=>"1", "param_two"=>"2"}
339
- def index
340
- params.each do |name, value|
341
- puts name
342
- end
343
- end
349
+ *Xavier Noria*, *Jean Boussier*
344
350
 
345
- # Prints
346
- # param
347
- # param_two
351
+ * Correctly identify the entire localhost IPv4 range as trusted proxy.
348
352
 
349
- *Dominic Cleal*
353
+ *Nick Soracco*
350
354
 
351
- * Add `Referrer-Policy` header to default headers set.
355
+ * `url_for` will now use "https://" as the default protocol when
356
+ `Rails.application.config.force_ssl` is set to true.
352
357
 
353
- *Guillermo Iguaran*
358
+ *Jonathan Hefner*
354
359
 
355
- * Changed the system tests to set Puma as default server only when the
356
- user haven't specified manually another server.
360
+ * Accept and default to base64_urlsafe CSRF tokens.
357
361
 
358
- *Guillermo Iguaran*
362
+ Base64 strict-encoded CSRF tokens are not inherently websafe, which makes
363
+ them difficult to deal with. For example, the common practice of sending
364
+ the CSRF token to a browser in a client-readable cookie does not work properly
365
+ out of the box: the value has to be url-encoded and decoded to survive transport.
359
366
 
360
- * Add secure `X-Download-Options` and `X-Permitted-Cross-Domain-Policies` to
361
- default headers set.
367
+ Now, we generate Base64 urlsafe-encoded CSRF tokens, which are inherently safe
368
+ to transport. Validation accepts both urlsafe tokens, and strict-encoded tokens
369
+ for backwards compatibility.
362
370
 
363
- *Guillermo Iguaran*
371
+ *Scott Blum*
364
372
 
365
- * Add headless firefox support to System Tests.
373
+ * Support rolling deploys for cookie serialization/encryption changes.
366
374
 
367
- *bogdanvlviv*
375
+ In a distributed configuration like rolling update, users may observe
376
+ both old and new instances during deployment. Users may be served by a
377
+ new instance and then by an old instance.
368
378
 
369
- * Changed the default system test screenshot output from `inline` to `simple`.
379
+ That means when the server changes `cookies_serializer` from `:marshal`
380
+ to `:hybrid` or the server changes `use_authenticated_cookie_encryption`
381
+ from `false` to `true`, users may lose their sessions if they access the
382
+ server during deployment.
370
383
 
371
- `inline` works well for iTerm2 but not everyone uses iTerm2. Some terminals like
372
- Terminal.app ignore the `inline` and output the path to the file since it can't
373
- render the image. Other terminals, like those on Ubuntu, cannot handle the image
374
- inline, but also don't handle it gracefully and instead of outputting the file
375
- path, it dumps binary into the terminal.
384
+ We added fallbacks to downgrade the cookie format when necessary during
385
+ deployment, ensuring compatibility on both old and new instances.
376
386
 
377
- Commit 9d6e28 fixes this by changing the default for screenshot to be `simple`.
387
+ *Masaki Hara*
378
388
 
379
- *Eileen M. Uchitelle*
389
+ * `ActionDispatch::Request.remote_ip` has ip address even when all sites are trusted.
380
390
 
381
- * Register most popular audio/video/font mime types supported by modern browsers.
391
+ Before, if all `X-Forwarded-For` sites were trusted, the `remote_ip` would default to `127.0.0.1`.
392
+ Now, the furthest proxy site is used. e.g.: It now gives an ip address when using curl from the load balancer.
382
393
 
383
- *Guillermo Iguaran*
394
+ *Keenan Brock*
384
395
 
385
- * Fix optimized url helpers when using relative url root.
396
+ * Fix possible information leak / session hijacking vulnerability.
386
397
 
387
- Fixes #31220.
398
+ The `ActionDispatch::Session::MemcacheStore` is still vulnerable given it requires the
399
+ gem dalli to be updated as well.
388
400
 
389
- *Andrew White*
401
+ CVE-2019-16782.
390
402
 
391
- * Add DSL for configuring Content-Security-Policy header.
403
+ * Include child session assertion count in ActionDispatch::IntegrationTest.
392
404
 
393
- The DSL allows you to configure a global Content-Security-Policy
394
- header and then override within a controller. For more information
395
- about the Content-Security-Policy header see MDN:
405
+ `IntegrationTest#open_session` uses `dup` to create the new session, which
406
+ meant it had its own copy of `@assertions`. This prevented the assertions
407
+ from being correctly counted and reported.
396
408
 
397
- https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy
409
+ Child sessions now have their `attr_accessor` overridden to delegate to the
410
+ root session.
398
411
 
399
- Example global policy:
412
+ Fixes #32142.
400
413
 
401
- # config/initializers/content_security_policy.rb
402
- Rails.application.config.content_security_policy do |p|
403
- p.default_src :self, :https
404
- p.font_src :self, :https, :data
405
- p.img_src :self, :https, :data
406
- p.object_src :none
407
- p.script_src :self, :https
408
- p.style_src :self, :https, :unsafe_inline
409
- end
414
+ *Sam Bostock*
410
415
 
411
- Example controller overrides:
416
+ * Add SameSite protection to every written cookie.
412
417
 
413
- # Override policy inline
414
- class PostsController < ApplicationController
415
- content_security_policy do |p|
416
- p.upgrade_insecure_requests true
417
- end
418
- end
418
+ Enabling `SameSite` cookie protection is an addition to CSRF protection,
419
+ where cookies won't be sent by browsers in cross-site POST requests when set to `:lax`.
419
420
 
420
- # Using literal values
421
- class PostsController < ApplicationController
422
- content_security_policy do |p|
423
- p.base_uri "https://www.example.com"
424
- end
425
- end
421
+ `:strict` disables cookies being sent in cross-site GET or POST requests.
426
422
 
427
- # Using mixed static and dynamic values
428
- class PostsController < ApplicationController
429
- content_security_policy do |p|
430
- p.base_uri :self, -> { "https://#{current_user.domain}.example.com" }
431
- end
432
- end
423
+ Passing `:none` disables this protection and is the same as previous versions albeit a `; SameSite=None` is appended to the cookie.
433
424
 
434
- Allows you to also only report content violations for migrating
435
- legacy content using the `content_security_policy_report_only`
436
- configuration attribute, e.g;
425
+ See upgrade instructions in config/initializers/new_framework_defaults_6_1.rb.
437
426
 
438
- # config/initializers/content_security_policy.rb
439
- Rails.application.config.content_security_policy_report_only = true
427
+ More info [here](https://tools.ietf.org/html/draft-west-first-party-cookies-07)
440
428
 
441
- # controller override
442
- class PostsController < ApplicationController
443
- content_security_policy_report_only only: :index
444
- end
429
+ _NB: Technically already possible as Rack supports SameSite protection, this is to ensure it's applied to all cookies_
445
430
 
446
- Note that this feature does not validate the header for performance
447
- reasons since the header is calculated at runtime.
431
+ *Cédric Fabianski*
448
432
 
449
- *Andrew White*
433
+ * Bring back the feature that allows loading external route files from the router.
450
434
 
451
- * Make `assert_recognizes` to traverse mounted engines.
435
+ This feature existed back in 2012 but got reverted with the incentive that
436
+ https://github.com/rails/routing_concerns was a better approach. Turned out
437
+ that this wasn't fully the case and loading external route files from the router
438
+ can be helpful for applications with a really large set of routes.
439
+ Without this feature, application needs to implement routes reloading
440
+ themselves and it's not straightforward.
452
441
 
453
- *Yuichiro Kaneko*
442
+ ```ruby
443
+ # config/routes.rb
454
444
 
455
- * Remove deprecated `ActionController::ParamsParser::ParseError`.
445
+ Rails.application.routes.draw do
446
+ draw(:admin)
447
+ end
456
448
 
457
- *Rafael Mendonça França*
449
+ # config/routes/admin.rb
458
450
 
459
- * Add `:allow_other_host` option to `redirect_back` method.
451
+ get :foo, to: 'foo#bar'
452
+ ```
460
453
 
461
- When `allow_other_host` is set to `false`, the `redirect_back` will not allow redirecting from a
462
- different host. `allow_other_host` is `true` by default.
454
+ *Yehuda Katz*, *Edouard Chin*
463
455
 
464
- *Tim Masliuchenko*
456
+ * Fix system test driver option initialization for non-headless browsers.
465
457
 
466
- * Add headless chrome support to System Tests.
458
+ *glaszig*
467
459
 
468
- *Yuji Yaginuma*
460
+ * `redirect_to.action_controller` notifications now include the `ActionDispatch::Request` in
461
+ their payloads as `:request`.
469
462
 
470
- * Add ability to enable Early Hints for HTTP/2
463
+ *Austin Story*
471
464
 
472
- If supported by the server, and enabled in Puma this allows H2 Early Hints to be used.
465
+ * `respond_to#any` no longer returns a response's Content-Type based on the
466
+ request format but based on the block given.
473
467
 
474
- The `javascript_include_tag` and the `stylesheet_link_tag` automatically add Early Hints if requested.
468
+ Example:
475
469
 
476
- *Eileen M. Uchitelle*, *Aaron Patterson*
470
+ ```ruby
471
+ def my_action
472
+ respond_to do |format|
473
+ format.any { render(json: { foo: 'bar' }) }
474
+ end
475
+ end
477
476
 
478
- * Simplify cookies middleware with key rotation support
477
+ get('my_action.csv')
478
+ ```
479
479
 
480
- Use the `rotate` method for both `MessageEncryptor` and
481
- `MessageVerifier` to add key rotation support for encrypted and
482
- signed cookies. This also helps simplify support for legacy cookie
483
- security.
480
+ The previous behaviour was to respond with a `text/csv` Content-Type which
481
+ is inaccurate since a JSON response is being rendered.
484
482
 
485
- *Michael J Coyne*
483
+ Now it correctly returns a `application/json` Content-Type.
486
484
 
487
- * Use Capybara registered `:puma` server config.
485
+ *Edouard Chin*
488
486
 
489
- The Capybara registered `:puma` server ensures the puma server is run in process so
490
- connection sharing and open request detection work correctly by default.
487
+ * Replaces (back)slashes in failure screenshot image paths with dashes.
491
488
 
492
- *Thomas Walpole*
489
+ If a failed test case contained a slash or a backslash, a screenshot would be created in a
490
+ nested directory, causing issues with `tmp:clear`.
493
491
 
494
- * Cookies `:expires` option supports `ActiveSupport::Duration` object.
492
+ *Damir Zekic*
495
493
 
496
- cookies[:user_name] = { value: "assain", expires: 1.hour }
497
- cookies[:key] = { value: "a yummy cookie", expires: 6.months }
494
+ * Add `params.member?` to mimic Hash behavior.
498
495
 
499
- Pull Request: #30121
496
+ *Younes Serraj*
500
497
 
501
- *Assain Jaleel*
498
+ * `process_action.action_controller` notifications now include the following in their payloads:
502
499
 
503
- * Enforce signed/encrypted cookie expiry server side.
500
+ * `:request` - the `ActionDispatch::Request`
501
+ * `:response` - the `ActionDispatch::Response`
504
502
 
505
- Rails can thwart attacks by malicious clients that don't honor a cookie's expiry.
503
+ *George Claghorn*
506
504
 
507
- It does so by stashing the expiry within the written cookie and relying on the
508
- signing/encrypting to vouch that it hasn't been tampered with. Then on a
509
- server-side read, the expiry is verified and any expired cookie is discarded.
505
+ * Updated `ActionDispatch::Request.remote_ip` setter to clear set the instance
506
+ `remote_ip` to `nil` before setting the header that the value is derived
507
+ from.
510
508
 
511
- Pull Request: #30121
509
+ Fixes #37383.
512
510
 
513
- *Assain Jaleel*
511
+ *Norm Provost*
514
512
 
515
- * Make `take_failed_screenshot` work within engine.
513
+ * `ActionController::Base.log_at` allows setting a different log level per request.
516
514
 
517
- Fixes #30405.
515
+ ```ruby
516
+ # Use the debug level if a particular cookie is set.
517
+ class ApplicationController < ActionController::Base
518
+ log_at :debug, if: -> { cookies[:debug] }
519
+ end
520
+ ```
518
521
 
519
- *Yuji Yaginuma*
522
+ *George Claghorn*
523
+
524
+ * Allow system test screen shots to be taken more than once in
525
+ a test by prefixing the file name with an incrementing counter.
526
+
527
+ Add an environment variable `RAILS_SYSTEM_TESTING_SCREENSHOT_HTML` to
528
+ enable saving of HTML during a screenshot in addition to the image.
529
+ This uses the same image name, with the extension replaced with `.html`
520
530
 
521
- * Deprecate `ActionDispatch::TestResponse` response aliases.
531
+ *Tom Fakes*
522
532
 
523
- `#success?`, `#missing?` & `#error?` are not supported by the actual
524
- `ActionDispatch::Response` object and can produce false-positives. Instead,
525
- use the response helpers provided by `Rack::Response`.
533
+ * Add `Vary: Accept` header when using `Accept` header for response.
526
534
 
527
- *Trevor Wistaff*
535
+ For some requests like `/users/1`, Rails uses requests' `Accept`
536
+ header to determine what to return. And if we don't add `Vary`
537
+ in the response header, browsers might accidentally cache different
538
+ types of content, which would cause issues: e.g. javascript got displayed
539
+ instead of html content. This PR fixes these issues by adding `Vary: Accept`
540
+ in these types of requests. For more detailed problem description, please read:
528
541
 
529
- * Protect from forgery by default
542
+ https://github.com/rails/rails/pull/36213
530
543
 
531
- Rather than protecting from forgery in the generated `ApplicationController`,
532
- add it to `ActionController::Base` depending on
533
- `config.action_controller.default_protect_from_forgery`. This configuration
534
- defaults to false to support older versions which have removed it from their
535
- `ApplicationController`, but is set to true for Rails 5.2.
544
+ Fixes #25842.
536
545
 
537
- *Lisa Ugray*
546
+ *Stan Lo*
538
547
 
539
- * Fallback `ActionController::Parameters#to_s` to `Hash#to_s`.
548
+ * Fix IntegrationTest `follow_redirect!` to follow redirection using the same HTTP verb when following
549
+ a 307 redirection.
540
550
 
541
- *Kir Shatrov*
551
+ *Edouard Chin*
542
552
 
543
- * `driven_by` now registers poltergeist and capybara-webkit.
553
+ * System tests require Capybara 3.26 or newer.
544
554
 
545
- If poltergeist or capybara-webkit are set as drivers is set for System Tests,
546
- `driven_by` will register the driver and set additional options passed via
547
- the `:options` parameter.
555
+ *George Claghorn*
548
556
 
549
- Refer to the respective driver's documentation to see what options can be passed.
557
+ * Reduced log noise handling ActionController::RoutingErrors.
550
558
 
551
- *Mario Chavez*
559
+ *Alberto Fernández-Capel*
552
560
 
553
- * AEAD encrypted cookies and sessions with GCM.
561
+ * Add DSL for configuring HTTP Feature Policy.
554
562
 
555
- Encrypted cookies now use AES-GCM which couples authentication and
556
- encryption in one faster step and produces shorter ciphertexts. Cookies
557
- encrypted using AES in CBC HMAC mode will be seamlessly upgraded when
558
- this new mode is enabled via the
559
- `action_dispatch.use_authenticated_cookie_encryption` configuration value.
563
+ This new DSL provides a way to configure an HTTP Feature Policy at a
564
+ global or per-controller level. Full details of HTTP Feature Policy
565
+ specification and guidelines can be found at MDN:
560
566
 
561
- *Michael J Coyne*
567
+ https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Feature-Policy
562
568
 
563
- * Change the cache key format for fragments to make it easier to debug key churn. The new format is:
569
+ Example global policy:
570
+
571
+ ```ruby
572
+ Rails.application.config.feature_policy do |f|
573
+ f.camera :none
574
+ f.gyroscope :none
575
+ f.microphone :none
576
+ f.usb :none
577
+ f.fullscreen :self
578
+ f.payment :self, "https://secure.example.com"
579
+ end
580
+ ```
564
581
 
565
- views/template/action.html.erb:7a1156131a6928cb0026877f8b749ac9/projects/123
566
- ^template path ^template tree digest ^class ^id
582
+ Example controller level policy:
567
583
 
568
- *DHH*
584
+ ```ruby
585
+ class PagesController < ApplicationController
586
+ feature_policy do |p|
587
+ p.geolocation "https://example.com"
588
+ end
589
+ end
590
+ ```
569
591
 
570
- * Add support for recyclable cache keys with fragment caching. This uses the new versioned entries in the
571
- `ActiveSupport::Cache` stores and relies on the fact that Active Record has split `#cache_key` and `#cache_version`
572
- to support it.
592
+ *Jacob Bednarz*
573
593
 
574
- *DHH*
594
+ * Add the ability to set the CSP nonce only to the specified directives.
575
595
 
576
- * Add `action_controller_api` and `action_controller_base` load hooks to be called in `ActiveSupport.on_load`
596
+ Fixes #35137.
597
+
598
+ *Yuji Yaginuma*
577
599
 
578
- `ActionController::Base` and `ActionController::API` have differing implementations. This means that
579
- the one umbrella hook `action_controller` is not able to address certain situations where a method
580
- may not exist in a certain implementation.
600
+ * Keep part when scope option has value.
581
601
 
582
- This is fixed by adding two new hooks so you can target `ActionController::Base` vs `ActionController::API`
602
+ When a route was defined within an optional scope, if that route didn't
603
+ take parameters the scope was lost when using path helpers. This commit
604
+ ensures scope is kept both when the route takes parameters or when it
605
+ doesn't.
606
+
607
+ Fixes #33219.
608
+
609
+ *Alberto Almagro*
610
+
611
+ * Added `deep_transform_keys` and `deep_transform_keys!` methods to ActionController::Parameters.
612
+
613
+ *Gustavo Gutierrez*
614
+
615
+ * Calling `ActionController::Parameters#transform_keys`/`!` without a block now returns
616
+ an enumerator for the parameters instead of the underlying hash.
617
+
618
+ *Eugene Kenny*
583
619
 
584
- Fixes #27013.
620
+ * Fix strong parameters blocks all attributes even when only some keys are invalid (non-numerical).
621
+ It should only block invalid key's values instead.
585
622
 
586
- *Julian Nadeau*
623
+ *Stan Lo*
587
624
 
588
625
 
589
- Please check [5-1-stable](https://github.com/rails/rails/blob/5-1-stable/actionpack/CHANGELOG.md) for previous changes.
626
+ Please check [6-0-stable](https://github.com/rails/rails/blob/6-0-stable/actionpack/CHANGELOG.md) for previous changes.