actionpack 6.0.6.1 → 6.1.7.6

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 (116) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +416 -255
  3. data/MIT-LICENSE +1 -2
  4. data/lib/abstract_controller/base.rb +35 -2
  5. data/lib/abstract_controller/callbacks.rb +2 -2
  6. data/lib/abstract_controller/collector.rb +4 -2
  7. data/lib/abstract_controller/helpers.rb +105 -90
  8. data/lib/abstract_controller/railties/routes_helpers.rb +17 -1
  9. data/lib/abstract_controller/rendering.rb +9 -9
  10. data/lib/abstract_controller/translation.rb +8 -2
  11. data/lib/abstract_controller.rb +1 -0
  12. data/lib/action_controller/api.rb +2 -2
  13. data/lib/action_controller/base.rb +4 -2
  14. data/lib/action_controller/caching.rb +0 -1
  15. data/lib/action_controller/log_subscriber.rb +3 -3
  16. data/lib/action_controller/metal/conditional_get.rb +11 -3
  17. data/lib/action_controller/metal/content_security_policy.rb +1 -1
  18. data/lib/action_controller/metal/cookies.rb +3 -1
  19. data/lib/action_controller/metal/data_streaming.rb +1 -1
  20. data/lib/action_controller/metal/etag_with_template_digest.rb +3 -5
  21. data/lib/action_controller/metal/exceptions.rb +33 -0
  22. data/lib/action_controller/metal/head.rb +7 -4
  23. data/lib/action_controller/metal/helpers.rb +11 -1
  24. data/lib/action_controller/metal/http_authentication.rb +5 -2
  25. data/lib/action_controller/metal/implicit_render.rb +1 -1
  26. data/lib/action_controller/metal/instrumentation.rb +11 -9
  27. data/lib/action_controller/metal/live.rb +10 -1
  28. data/lib/action_controller/metal/logging.rb +20 -0
  29. data/lib/action_controller/metal/mime_responds.rb +6 -2
  30. data/lib/action_controller/metal/parameter_encoding.rb +35 -4
  31. data/lib/action_controller/metal/params_wrapper.rb +14 -8
  32. data/lib/action_controller/metal/permissions_policy.rb +46 -0
  33. data/lib/action_controller/metal/redirecting.rb +21 -2
  34. data/lib/action_controller/metal/rendering.rb +6 -0
  35. data/lib/action_controller/metal/request_forgery_protection.rb +1 -1
  36. data/lib/action_controller/metal/rescue.rb +1 -1
  37. data/lib/action_controller/metal/strong_parameters.rb +104 -16
  38. data/lib/action_controller/metal.rb +2 -2
  39. data/lib/action_controller/renderer.rb +23 -13
  40. data/lib/action_controller/test_case.rb +65 -56
  41. data/lib/action_controller.rb +2 -3
  42. data/lib/action_dispatch/http/cache.rb +18 -17
  43. data/lib/action_dispatch/http/content_security_policy.rb +6 -1
  44. data/lib/action_dispatch/http/filter_parameters.rb +1 -1
  45. data/lib/action_dispatch/http/filter_redirect.rb +1 -1
  46. data/lib/action_dispatch/http/headers.rb +3 -2
  47. data/lib/action_dispatch/http/mime_negotiation.rb +14 -8
  48. data/lib/action_dispatch/http/mime_type.rb +29 -16
  49. data/lib/action_dispatch/http/parameters.rb +1 -19
  50. data/lib/action_dispatch/http/permissions_policy.rb +173 -0
  51. data/lib/action_dispatch/http/request.rb +24 -8
  52. data/lib/action_dispatch/http/response.rb +17 -16
  53. data/lib/action_dispatch/http/url.rb +3 -2
  54. data/lib/action_dispatch/journey/formatter.rb +55 -30
  55. data/lib/action_dispatch/journey/gtg/builder.rb +22 -36
  56. data/lib/action_dispatch/journey/gtg/simulator.rb +8 -7
  57. data/lib/action_dispatch/journey/gtg/transition_table.rb +6 -4
  58. data/lib/action_dispatch/journey/nfa/dot.rb +0 -11
  59. data/lib/action_dispatch/journey/nodes/node.rb +4 -3
  60. data/lib/action_dispatch/journey/parser.rb +13 -13
  61. data/lib/action_dispatch/journey/parser.y +1 -1
  62. data/lib/action_dispatch/journey/path/pattern.rb +13 -18
  63. data/lib/action_dispatch/journey/route.rb +7 -18
  64. data/lib/action_dispatch/journey/router/utils.rb +6 -4
  65. data/lib/action_dispatch/journey/router.rb +26 -30
  66. data/lib/action_dispatch/journey/visitors.rb +1 -1
  67. data/lib/action_dispatch/journey.rb +0 -2
  68. data/lib/action_dispatch/middleware/actionable_exceptions.rb +1 -1
  69. data/lib/action_dispatch/middleware/cookies.rb +89 -46
  70. data/lib/action_dispatch/middleware/debug_exceptions.rb +8 -15
  71. data/lib/action_dispatch/middleware/debug_view.rb +1 -1
  72. data/lib/action_dispatch/middleware/exception_wrapper.rb +28 -16
  73. data/lib/action_dispatch/middleware/host_authorization.rb +63 -14
  74. data/lib/action_dispatch/middleware/remote_ip.rb +5 -4
  75. data/lib/action_dispatch/middleware/request_id.rb +4 -5
  76. data/lib/action_dispatch/middleware/session/abstract_store.rb +2 -2
  77. data/lib/action_dispatch/middleware/session/cookie_store.rb +2 -2
  78. data/lib/action_dispatch/middleware/show_exceptions.rb +12 -0
  79. data/lib/action_dispatch/middleware/ssl.rb +12 -7
  80. data/lib/action_dispatch/middleware/stack.rb +19 -1
  81. data/lib/action_dispatch/middleware/static.rb +154 -93
  82. data/lib/action_dispatch/middleware/templates/rescues/_message_and_suggestions.html.erb +22 -0
  83. data/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb +2 -5
  84. data/lib/action_dispatch/middleware/templates/rescues/invalid_statement.html.erb +2 -2
  85. data/lib/action_dispatch/middleware/templates/rescues/invalid_statement.text.erb +2 -2
  86. data/lib/action_dispatch/middleware/templates/rescues/layout.erb +100 -8
  87. data/lib/action_dispatch/middleware/templates/rescues/unknown_action.html.erb +1 -1
  88. data/lib/action_dispatch/middleware/templates/routes/_table.html.erb +21 -1
  89. data/lib/action_dispatch/railtie.rb +3 -2
  90. data/lib/action_dispatch/request/session.rb +2 -8
  91. data/lib/action_dispatch/request/utils.rb +26 -2
  92. data/lib/action_dispatch/routing/inspector.rb +8 -7
  93. data/lib/action_dispatch/routing/mapper.rb +102 -71
  94. data/lib/action_dispatch/routing/polymorphic_routes.rb +12 -11
  95. data/lib/action_dispatch/routing/redirection.rb +4 -4
  96. data/lib/action_dispatch/routing/route_set.rb +49 -41
  97. data/lib/action_dispatch/system_test_case.rb +35 -24
  98. data/lib/action_dispatch/system_testing/browser.rb +33 -27
  99. data/lib/action_dispatch/system_testing/driver.rb +6 -7
  100. data/lib/action_dispatch/system_testing/test_helpers/screenshot_helper.rb +47 -6
  101. data/lib/action_dispatch/system_testing/test_helpers/setup_and_teardown.rb +4 -7
  102. data/lib/action_dispatch/testing/assertions/response.rb +2 -4
  103. data/lib/action_dispatch/testing/assertions/routing.rb +5 -5
  104. data/lib/action_dispatch/testing/assertions.rb +1 -1
  105. data/lib/action_dispatch/testing/integration.rb +40 -29
  106. data/lib/action_dispatch/testing/test_process.rb +32 -4
  107. data/lib/action_dispatch/testing/test_request.rb +3 -3
  108. data/lib/action_dispatch.rb +3 -2
  109. data/lib/action_pack/gem_version.rb +3 -3
  110. data/lib/action_pack.rb +1 -1
  111. metadata +18 -19
  112. data/lib/action_controller/metal/force_ssl.rb +0 -58
  113. data/lib/action_dispatch/http/parameter_filter.rb +0 -12
  114. data/lib/action_dispatch/journey/nfa/builder.rb +0 -78
  115. data/lib/action_dispatch/journey/nfa/simulator.rb +0 -47
  116. data/lib/action_dispatch/journey/nfa/transition_table.rb +0 -119
data/CHANGELOG.md CHANGED
@@ -1,40 +1,131 @@
1
- ## Rails 6.0.6.1 (January 17, 2023) ##
1
+ ## Rails 6.1.7.6 (August 22, 2023) ##
2
2
 
3
3
  * No changes.
4
4
 
5
5
 
6
- ## Rails 6.0.6 (September 09, 2022) ##
6
+ ## Rails 6.1.7.5 (August 22, 2023) ##
7
7
 
8
8
  * No changes.
9
9
 
10
10
 
11
- ## Rails 6.0.5.1 (July 12, 2022) ##
11
+ ## Rails 6.1.7.4 (June 26, 2023) ##
12
+
13
+ * Raise an exception if illegal characters are provide to redirect_to
14
+ [CVE-2023-28362]
15
+
16
+ *Zack Deveau*
17
+
18
+ ## Rails 6.1.7.3 (March 13, 2023) ##
19
+
20
+ * No changes.
21
+
22
+
23
+ ## Rails 6.1.7.2 (January 24, 2023) ##
24
+
25
+ * Fix `domain: :all` for two letter TLD
26
+
27
+ This fixes a compatibility issue introduced in our previous security
28
+ release when using `domain: :all` with a two letter but single level top
29
+ level domain domain (like `.ca`, rather than `.co.uk`).
30
+
31
+
32
+ ## Rails 6.1.7.1 (January 17, 2023) ##
33
+
34
+ * Avoid regex backtracking on If-None-Match header
35
+
36
+ [CVE-2023-22795]
37
+
38
+ * Use string#split instead of regex for domain parts
39
+
40
+ [CVE-2023-22792]
41
+
42
+
43
+ ## Rails 6.1.7 (September 09, 2022) ##
12
44
 
13
45
  * No changes.
14
46
 
15
47
 
16
- ## Rails 6.0.5 (May 09, 2022) ##
48
+ ## Rails 6.1.6.1 (July 12, 2022) ##
17
49
 
18
50
  * No changes.
19
51
 
20
52
 
21
- ## Rails 6.0.4.8 (April 26, 2022) ##
53
+ ## Rails 6.1.6 (May 09, 2022) ##
54
+
55
+ * No changes.
56
+
57
+
58
+ ## Rails 6.1.5.1 (April 26, 2022) ##
22
59
 
23
60
  * Allow Content Security Policy DSL to generate for API responses.
24
61
 
25
62
  *Tim Wade*
26
63
 
27
- ## Rails 6.0.4.7 (March 08, 2022) ##
64
+ ## Rails 6.1.5 (March 09, 2022) ##
65
+
66
+ * Fix `content_security_policy` returning invalid directives.
67
+
68
+ Directives such as `self`, `unsafe-eval` and few others were not
69
+ single quoted when the directive was the result of calling a lambda
70
+ returning an array.
71
+
72
+ ```ruby
73
+ content_security_policy do |policy|
74
+ policy.frame_ancestors lambda { [:self, "https://example.com"] }
75
+ end
76
+ ```
77
+
78
+ With this fix the policy generated from above will now be valid.
79
+
80
+ *Edouard Chin*
81
+
82
+ * Update `HostAuthorization` middleware to render debug info only
83
+ when `config.consider_all_requests_local` is set to true.
84
+
85
+ Also, blocked host info is always logged with level `error`.
86
+
87
+ Fixes #42813.
88
+
89
+ *Nikita Vyrko*
90
+
91
+ * Dup arrays that get "converted".
92
+
93
+ Fixes #43681.
94
+
95
+ *Aaron Patterson*
96
+
97
+ * Don't show deprecation warning for equal paths.
98
+
99
+ *Anton Rieder*
100
+
101
+ * Fix crash in `ActionController::Instrumentation` with invalid HTTP formats.
102
+
103
+ Fixes #43094.
104
+
105
+ *Alex Ghiculescu*
106
+
107
+ * Add fallback host for SystemTestCase driven by RackTest.
108
+
109
+ Fixes #42780.
110
+
111
+ *Petrik de Heus*
112
+
113
+ * Add more detail about what hosts are allowed.
114
+
115
+ *Alex Ghiculescu*
116
+
117
+
118
+ ## Rails 6.1.4.7 (March 08, 2022) ##
28
119
 
29
120
  * No changes.
30
121
 
31
122
 
32
- ## Rails 6.0.4.6 (February 11, 2022) ##
123
+ ## Rails 6.1.4.6 (February 11, 2022) ##
33
124
 
34
125
  * No changes.
35
126
 
36
127
 
37
- ## Rails 6.0.4.5 (February 11, 2022) ##
128
+ ## Rails 6.1.4.5 (February 11, 2022) ##
38
129
 
39
130
  * Under certain circumstances, the middleware isn't informed that the
40
131
  response body has been fully closed which result in request state not
@@ -43,17 +134,17 @@
43
134
  [CVE-2022-23633]
44
135
 
45
136
 
46
- ## Rails 6.0.4.4 (December 15, 2021) ##
137
+ ## Rails 6.1.4.4 (December 15, 2021) ##
47
138
 
48
139
  * Fix issue with host protection not allowing host with port in development.
49
140
 
50
141
 
51
- ## Rails 6.0.4.3 (December 14, 2021) ##
142
+ ## Rails 6.1.4.3 (December 14, 2021) ##
52
143
 
53
- * Fix issue with host protection not allowing localhost in development.
144
+ * Fix issue with host protection not allowing localhost in development.
54
145
 
55
146
 
56
- ## Rails 6.0.4.2 (December 14, 2021) ##
147
+ ## Rails 6.1.4.2 (December 14, 2021) ##
57
148
 
58
149
  * Fix X_FORWARDED_HOST protection. [CVE-2021-44528]
59
150
 
@@ -65,35 +156,48 @@
65
156
  "allowed host" formats can cause the Host Authorization middleware in Action
66
157
  Pack to redirect users to a malicious website.
67
158
 
68
- ## Rails 6.0.4 (June 15, 2021) ##
159
+ ## Rails 6.1.4 (June 24, 2021) ##
69
160
 
70
- * Accept base64_urlsafe CSRF tokens to make forward compatible.
161
+ * Ignore file fixtures on `db:fixtures:load`
71
162
 
72
- Base64 strict-encoded CSRF tokens are not inherently websafe, which makes
73
- them difficult to deal with. For example, the common practice of sending
74
- the CSRF token to a browser in a client-readable cookie does not work properly
75
- out of the box: the value has to be url-encoded and decoded to survive transport.
163
+ *Kevin Sjöberg*
76
164
 
77
- In Rails 6.1, we generate Base64 urlsafe-encoded CSRF tokens, which are inherently
78
- safe to transport. Validation accepts both urlsafe tokens, and strict-encoded
79
- tokens for backwards compatibility.
165
+ * Fix ActionController::Live controller test deadlocks by removing the body buffer size limit for tests.
80
166
 
81
- In Rails 5.2.5, the CSRF token format is accidentally changed to urlsafe-encoded.
82
- If you upgrade apps from 5.2.5, set the config `urlsafe_csrf_tokens = true`.
167
+ *Dylan Thacker-Smith*
168
+
169
+ * Correctly place optional path parameter booleans.
170
+
171
+ Previously, if you specify a url parameter that is part of the path as false it would include that part
172
+ of the path as parameter for example:
83
173
 
84
- ```ruby
85
- Rails.application.config.action_controller.urlsafe_csrf_tokens = true
86
174
  ```
175
+ get "(/optional/:optional_id)/things" => "foo#foo", as: :things
176
+ things_path(optional_id: false) # => /things?optional_id=false
177
+ ```
178
+
179
+ After this change, true and false will be treated the same when used as optional path parameters. Meaning now:
180
+
181
+ ```
182
+ get '(this/:my_bool)/that' as: :that
183
+
184
+ that_path(my_bool: true) # => `/this/true/that`
185
+ that_path(my_bool: false) # => `/this/false/that`
186
+ ```
187
+
188
+ *Adam Hess*
189
+
190
+ * Add support for 'private, no-store' Cache-Control headers.
87
191
 
88
- *Scott Blum*, *Étienne Barrié*
192
+ Previously, 'no-store' was exclusive; no other directives could be specified.
89
193
 
90
- * Signed and encrypted cookies can now store `false` as their value when
91
- `action_dispatch.use_cookies_with_metadata` is enabled.
194
+ *Alex Smith*
92
195
 
93
- *Rolandas Barysas*
94
196
 
197
+ ## Rails 6.1.3.2 (May 05, 2021) ##
95
198
 
96
- ## Rails 6.0.3.7 (May 05, 2021) ##
199
+ * Prevent open redirects by correctly escaping the host allow list
200
+ CVE-2021-22903
97
201
 
98
202
  * Prevent catastrophic backtracking during mime parsing
99
203
  CVE-2021-22902
@@ -111,12 +215,19 @@
111
215
 
112
216
  *Gannon McGibbon*
113
217
 
114
- ## Rails 6.0.3.6 (March 26, 2021) ##
218
+ ## Rails 6.1.3.1 (March 26, 2021) ##
115
219
 
116
220
  * No changes.
117
221
 
118
222
 
119
- ## Rails 6.0.3.5 (February 10, 2021) ##
223
+ ## Rails 6.1.3 (February 17, 2021) ##
224
+
225
+ * Re-define routes when not set correctly via inheritance.
226
+
227
+ *John Hawthorn*
228
+
229
+
230
+ ## Rails 6.1.2.1 (February 10, 2021) ##
120
231
 
121
232
  * Prevent open redirect when allowed host starts with a dot
122
233
 
@@ -128,390 +239,440 @@
128
239
  *Aaron Patterson*
129
240
 
130
241
 
131
- ## Rails 6.0.3.4 (October 07, 2020) ##
242
+ ## Rails 6.1.2 (February 09, 2021) ##
132
243
 
133
- * [CVE-2020-8264] Prevent XSS in Actionable Exceptions
244
+ * Fix error in `ActionController::LogSubscriber` that would happen when throwing inside a controller action.
134
245
 
246
+ *Janko Marohnić*
135
247
 
136
- ## Rails 6.0.3.3 (September 09, 2020) ##
248
+ * Fix `fixture_file_upload` deprecation when `file_fixture_path` is a relative path.
137
249
 
138
- * No changes.
250
+ *Eugene Kenny*
139
251
 
140
252
 
141
- ## Rails 6.0.3.2 (June 17, 2020) ##
253
+ ## Rails 6.1.1 (January 07, 2021) ##
142
254
 
143
- * [CVE-2020-8185] Only allow ActionableErrors if show_detailed_exceptions is enabled
255
+ * Fix nil translation key lookup in controllers/
144
256
 
145
- ## Rails 6.0.3.1 (May 18, 2020) ##
257
+ *Jan Klimo*
146
258
 
147
- * [CVE-2020-8166] HMAC raw CSRF token before masking it, so it cannot be used to reconstruct a per-form token
259
+ * Quietly handle unknown HTTP methods in Action Dispatch SSL middleware.
148
260
 
149
- * [CVE-2020-8164] Return self when calling #each, #each_pair, and #each_value instead of the raw @parameters hash
261
+ *Alex Robbin*
150
262
 
263
+ * Change the request method to a `GET` when passing failed requests down to `config.exceptions_app`.
151
264
 
152
- ## Rails 6.0.3 (May 06, 2020) ##
265
+ *Alex Robbin*
153
266
 
154
- * Include child session assertion count in ActionDispatch::IntegrationTest
155
267
 
156
- `IntegrationTest#open_session` uses `dup` to create the new session, which
157
- meant it had its own copy of `@assertions`. This prevented the assertions
158
- from being correctly counted and reported.
268
+ ## Rails 6.1.0 (December 09, 2020) ##
159
269
 
160
- Child sessions now have their `attr_accessor` overriden to delegate to the
161
- root session.
270
+ * Support for the HTTP header `Feature-Policy` has been revised to reflect
271
+ 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).
162
272
 
163
- Fixes #32142
273
+ ```ruby
274
+ Rails.application.config.permissions_policy do |p|
275
+ p.camera :none
276
+ p.gyroscope :none
277
+ p.microphone :none
278
+ p.usb :none
279
+ p.fullscreen :self
280
+ p.payment :self, "https://secure-example.com"
281
+ end
282
+ ```
164
283
 
165
- *Sam Bostock*
284
+ *Julien Grillot*
166
285
 
286
+ * Allow `ActionDispatch::HostAuthorization` to exclude specific requests.
167
287
 
168
- ## Rails 6.0.2.2 (March 19, 2020) ##
288
+ 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.
169
289
 
170
- * No changes.
290
+ *Chris Bisnett*
171
291
 
292
+ * Add `config.action_dispatch.request_id_header` to allow changing the name of
293
+ the unique X-Request-Id header
172
294
 
173
- ## Rails 6.0.2.1 (December 18, 2019) ##
295
+ *Arlston Fernandes*
174
296
 
175
- * Fix possible information leak / session hijacking vulnerability.
297
+ * Deprecate `config.action_dispatch.return_only_media_type_on_content_type`.
176
298
 
177
- The `ActionDispatch::Session::MemcacheStore` is still vulnerable given it requires the
178
- gem dalli to be updated as well.
299
+ *Rafael Mendonça França*
179
300
 
180
- CVE-2019-16782.
301
+ * Change `ActionDispatch::Response#content_type` to return the full Content-Type header.
181
302
 
303
+ *Rafael Mendonça França*
182
304
 
183
- ## Rails 6.0.2 (December 13, 2019) ##
305
+ * Remove deprecated `ActionDispatch::Http::ParameterFilter`.
184
306
 
185
- * Allow using mountable engine route helpers in System Tests.
307
+ *Rafael Mendonça França*
186
308
 
187
- *Chalo Fernandez*
309
+ * Added support for exclusive no-store Cache-Control header.
188
310
 
311
+ If `no-store` is set on Cache-Control header it is exclusive (all other cache directives are dropped).
189
312
 
190
- ## Rails 6.0.1 (November 5, 2019) ##
313
+ *Chris Kruger*
191
314
 
192
- * `ActionDispatch::SystemTestCase` now inherits from `ActiveSupport::TestCase`
193
- rather than `ActionDispatch::IntegrationTest`. This permits running jobs in
194
- system tests.
315
+ * Catch invalid UTF-8 parameters for POST requests and respond with BadRequest.
195
316
 
196
- *George Claghorn*, *Edouard Chin*
317
+ Additionally, perform `#set_binary_encoding` in `ActionDispatch::Http::Request#GET` and
318
+ `ActionDispatch::Http::Request#POST` prior to validating encoding.
197
319
 
198
- * Registered MIME types may contain extra flags:
320
+ *Adrianna Chang*
199
321
 
200
- ```ruby
201
- Mime::Type.register "text/html; fragment", :html_fragment
202
- ```
322
+ * Allow `assert_recognizes` routing assertions to work on mounted root routes.
203
323
 
204
- *Aaron Patterson*
324
+ *Gannon McGibbon*
205
325
 
326
+ * Change default redirection status code for non-GET/HEAD requests to 308 Permanent Redirect for `ActionDispatch::SSL`.
206
327
 
207
- ## Rails 6.0.0 (August 16, 2019) ##
328
+ *Alan Tan*, *Oz Ben-David*
208
329
 
209
- * No changes.
330
+ * Fix `follow_redirect!` to follow redirection with same HTTP verb when following
331
+ a 308 redirection.
210
332
 
333
+ *Alan Tan*
211
334
 
212
- ## Rails 6.0.0.rc2 (July 22, 2019) ##
335
+ * When multiple domains are specified for a cookie, a domain will now be
336
+ chosen only if it is equal to or is a superdomain of the request host.
213
337
 
214
- * Add the ability to set the CSP nonce only to the specified directives.
338
+ *Jonathan Hefner*
215
339
 
216
- Fixes #35137.
340
+ * `ActionDispatch::Static` handles precompiled Brotli (.br) files.
217
341
 
218
- *Yuji Yaginuma*
342
+ Adds to existing support for precompiled gzip (.gz) files.
343
+ Brotli files are preferred due to much better compression.
219
344
 
220
- * Keep part when scope option has value.
345
+ When the browser requests /some.js with `Accept-Encoding: br`,
346
+ we check for public/some.js.br and serve that file, if present, with
347
+ `Content-Encoding: br` and `Vary: Accept-Encoding` headers.
221
348
 
222
- When a route was defined within an optional scope, if that route didn't
223
- take parameters the scope was lost when using path helpers. This commit
224
- ensures scope is kept both when the route takes parameters or when it
225
- doesn't.
349
+ *Ryan Edward Hall*, *Jeremy Daer*
226
350
 
227
- Fixes #33219
351
+ * Add raise_on_missing_translations support for controllers.
228
352
 
229
- *Alberto Almagro*
353
+ This configuration determines whether an error should be raised for missing translations.
354
+ It can be enabled through `config.i18n.raise_on_missing_translations`. Note that described
355
+ configuration also affects raising error for missing translations in views.
230
356
 
231
- * Change `ActionDispatch::Response#content_type` to return Content-Type header as it is.
357
+ *fatkodima*
232
358
 
233
- Previously, `ActionDispatch::Response#content_type` returned value does NOT
234
- contain charset part. This behavior changed to returned Content-Type header
235
- containing charset part as it is.
359
+ * Added `compact` and `compact!` to `ActionController::Parameters`.
236
360
 
237
- If you want just MIME type, please use `ActionDispatch::Response#media_type`
238
- instead.
361
+ *Eugene Kenny*
239
362
 
240
- Enable `action_dispatch.return_only_media_type_on_content_type` to use this change.
241
- If not enabled, `ActionDispatch::Response#content_type` returns the same
242
- value as before version, but its behavior is deprecate.
363
+ * Calling `each_pair` or `each_value` on an `ActionController::Parameters`
364
+ without passing a block now returns an enumerator.
243
365
 
244
- *Yuji Yaginuma*
366
+ *Eugene Kenny*
245
367
 
246
- * Calling `ActionController::Parameters#transform_keys/!` without a block now returns
247
- an enumerator for the parameters instead of the underlying hash.
368
+ * `fixture_file_upload` now uses path relative to `file_fixture_path`
248
369
 
249
- *Eugene Kenny*
370
+ Previously the path had to be relative to `fixture_path`.
371
+ You can change your existing code as follow:
250
372
 
251
- * Fix a bug where DebugExceptions throws an error when malformed query parameters are provided
373
+ ```ruby
374
+ # Before
375
+ fixture_file_upload('files/dog.png')
252
376
 
253
- *Yuki Nishijima*, *Stan Lo*
377
+ # After
378
+ fixture_file_upload('dog.png')
379
+ ```
254
380
 
381
+ *Edouard Chin*
255
382
 
256
- ## Rails 6.0.0.rc1 (April 24, 2019) ##
383
+ * Remove deprecated `force_ssl` at the controller level.
257
384
 
258
- * Make system tests take a failed screenshot in a `before_teardown` hook
259
- rather than an `after_teardown` hook.
385
+ *Rafael Mendonça França*
260
386
 
261
- This helps minimize the time gap between when an assertion fails and when
262
- the screenshot is taken (reducing the time in which the page could have
263
- been dynamically updated after the assertion failed).
387
+ * The +helper+ class method for controllers loads helper modules specified as
388
+ strings/symbols with `String#constantize` instead of `require_dependency`.
264
389
 
265
- *Richard Macklin*
390
+ Remember that support for strings/symbols is only a convenient API. You can
391
+ always pass a module object:
266
392
 
267
- * Introduce `ActionDispatch::ActionableExceptions`.
393
+ ```ruby
394
+ helper UtilsHelper
395
+ ```
268
396
 
269
- The `ActionDispatch::ActionableExceptions` middleware dispatches actions
270
- from `ActiveSupport::ActionableError` descendants.
397
+ which is recommended because it is simple and direct. When a string/symbol
398
+ is received, `helper` just manipulates and inflects the argument to obtain
399
+ that same module object.
271
400
 
272
- Actionable errors let's you dispatch actions from Rails' error pages.
401
+ *Xavier Noria*, *Jean Boussier*
273
402
 
274
- *Vipul A M*, *Yao Jie*, *Genadi Samokovarov*
403
+ * Correctly identify the entire localhost IPv4 range as trusted proxy.
275
404
 
276
- * Raise an `ArgumentError` if a resource custom param contains a colon (`:`).
405
+ *Nick Soracco*
277
406
 
278
- After this change it's not possible anymore to configure routes like this:
407
+ * `url_for` will now use "https://" as the default protocol when
408
+ `Rails.application.config.force_ssl` is set to true.
279
409
 
280
- ```
281
- routes.draw do
282
- resources :users, param: 'name/:sneaky'
283
- end
284
- ```
410
+ *Jonathan Hefner*
285
411
 
286
- Fixes #30467.
412
+ * Accept and default to base64_urlsafe CSRF tokens.
287
413
 
288
- *Josua Schmid*
414
+ Base64 strict-encoded CSRF tokens are not inherently websafe, which makes
415
+ them difficult to deal with. For example, the common practice of sending
416
+ the CSRF token to a browser in a client-readable cookie does not work properly
417
+ out of the box: the value has to be url-encoded and decoded to survive transport.
289
418
 
419
+ Now, we generate Base64 urlsafe-encoded CSRF tokens, which are inherently safe
420
+ to transport. Validation accepts both urlsafe tokens, and strict-encoded tokens
421
+ for backwards compatibility.
290
422
 
291
- ## Rails 6.0.0.beta3 (March 11, 2019) ##
423
+ *Scott Blum*
292
424
 
293
- * No changes.
425
+ * Support rolling deploys for cookie serialization/encryption changes.
294
426
 
427
+ In a distributed configuration like rolling update, users may observe
428
+ both old and new instances during deployment. Users may be served by a
429
+ new instance and then by an old instance.
295
430
 
296
- ## Rails 6.0.0.beta2 (February 25, 2019) ##
431
+ That means when the server changes `cookies_serializer` from `:marshal`
432
+ to `:hybrid` or the server changes `use_authenticated_cookie_encryption`
433
+ from `false` to `true`, users may lose their sessions if they access the
434
+ server during deployment.
297
435
 
298
- * Make debug exceptions works in an environment where ActiveStorage is not loaded.
436
+ We added fallbacks to downgrade the cookie format when necessary during
437
+ deployment, ensuring compatibility on both old and new instances.
299
438
 
300
- *Tomoyuki Kurosawa*
439
+ *Masaki Hara*
301
440
 
302
- * `ActionDispatch::SystemTestCase.driven_by` can now be called with a block
303
- to define specific browser capabilities.
441
+ * `ActionDispatch::Request.remote_ip` has ip address even when all sites are trusted.
304
442
 
305
- *Edouard Chin*
443
+ Before, if all `X-Forwarded-For` sites were trusted, the `remote_ip` would default to `127.0.0.1`.
444
+ Now, the furthest proxy site is used. e.g.: It now gives an ip address when using curl from the load balancer.
306
445
 
446
+ *Keenan Brock*
307
447
 
308
- ## Rails 6.0.0.beta1 (January 18, 2019) ##
448
+ * Fix possible information leak / session hijacking vulnerability.
309
449
 
310
- * Remove deprecated `fragment_cache_key` helper in favor of `combined_fragment_cache_key`.
450
+ The `ActionDispatch::Session::MemcacheStore` is still vulnerable given it requires the
451
+ gem dalli to be updated as well.
311
452
 
312
- *Rafael Mendonça França*
453
+ CVE-2019-16782.
313
454
 
314
- * Remove deprecated methods in `ActionDispatch::TestResponse`.
455
+ * Include child session assertion count in ActionDispatch::IntegrationTest.
315
456
 
316
- `#success?`, `missing?` and `error?` were deprecated in Rails 5.2 in favor of
317
- `#successful?`, `not_found?` and `server_error?`.
457
+ `IntegrationTest#open_session` uses `dup` to create the new session, which
458
+ meant it had its own copy of `@assertions`. This prevented the assertions
459
+ from being correctly counted and reported.
318
460
 
319
- *Rafael Mendonça França*
461
+ Child sessions now have their `attr_accessor` overridden to delegate to the
462
+ root session.
320
463
 
321
- * Introduce `ActionDispatch::HostAuthorization`.
464
+ Fixes #32142.
322
465
 
323
- This is a new middleware that guards against DNS rebinding attacks by
324
- explicitly permitting the hosts a request can be made to.
466
+ *Sam Bostock*
325
467
 
326
- Each host is checked with the case operator (`#===`) to support `Regexp`,
327
- `Proc`, `IPAddr` and custom objects as host allowances.
468
+ * Add SameSite protection to every written cookie.
328
469
 
329
- *Genadi Samokovarov*
470
+ Enabling `SameSite` cookie protection is an addition to CSRF protection,
471
+ where cookies won't be sent by browsers in cross-site POST requests when set to `:lax`.
330
472
 
331
- * Allow using `parsed_body` in `ActionController::TestCase`.
473
+ `:strict` disables cookies being sent in cross-site GET or POST requests.
332
474
 
333
- In addition to `ActionDispatch::IntegrationTest`, allow using
334
- `parsed_body` in `ActionController::TestCase`:
475
+ Passing `:none` disables this protection and is the same as previous versions albeit a `; SameSite=None` is appended to the cookie.
335
476
 
336
- ```
337
- class SomeControllerTest < ActionController::TestCase
338
- def test_some_action
339
- post :action, body: { foo: 'bar' }
340
- assert_equal({ "foo" => "bar" }, response.parsed_body)
341
- end
342
- end
343
- ```
477
+ See upgrade instructions in config/initializers/new_framework_defaults_6_1.rb.
344
478
 
345
- Fixes #34676.
479
+ More info [here](https://tools.ietf.org/html/draft-west-first-party-cookies-07)
346
480
 
347
- *Tobias Bühlmann*
481
+ _NB: Technically already possible as Rack supports SameSite protection, this is to ensure it's applied to all cookies_
348
482
 
349
- * Raise an error on root route naming conflicts.
483
+ *Cédric Fabianski*
350
484
 
351
- Raises an `ArgumentError` when multiple root routes are defined in the
352
- same context instead of assigning nil names to subsequent roots.
485
+ * Bring back the feature that allows loading external route files from the router.
353
486
 
354
- *Gannon McGibbon*
487
+ This feature existed back in 2012 but got reverted with the incentive that
488
+ https://github.com/rails/routing_concerns was a better approach. Turned out
489
+ that this wasn't fully the case and loading external route files from the router
490
+ can be helpful for applications with a really large set of routes.
491
+ Without this feature, application needs to implement routes reloading
492
+ themselves and it's not straightforward.
355
493
 
356
- * Allow rescue from parameter parse errors:
494
+ ```ruby
495
+ # config/routes.rb
357
496
 
358
- ```
359
- rescue_from ActionDispatch::Http::Parameters::ParseError do
360
- head :unauthorized
497
+ Rails.application.routes.draw do
498
+ draw(:admin)
361
499
  end
500
+
501
+ # config/routes/admin.rb
502
+
503
+ get :foo, to: 'foo#bar'
362
504
  ```
363
505
 
364
- *Gannon McGibbon*, *Josh Cheek*
506
+ *Yehuda Katz*, *Edouard Chin*
365
507
 
366
- * Reset Capybara sessions if failed system test screenshot raising an exception.
508
+ * Fix system test driver option initialization for non-headless browsers.
367
509
 
368
- Reset Capybara sessions if `take_failed_screenshot` raise exception
369
- in system test `after_teardown`.
510
+ *glaszig*
370
511
 
371
- *Maxim Perepelitsa*
512
+ * `redirect_to.action_controller` notifications now include the `ActionDispatch::Request` in
513
+ their payloads as `:request`.
372
514
 
373
- * Use request object for context if there's no controller
515
+ *Austin Story*
374
516
 
375
- There is no controller instance when using a redirect route or a
376
- mounted rack application so pass the request object as the context
377
- when resolving dynamic CSP sources in this scenario.
517
+ * `respond_to#any` no longer returns a response's Content-Type based on the
518
+ request format but based on the block given.
378
519
 
379
- Fixes #34200.
520
+ Example:
380
521
 
381
- *Andrew White*
522
+ ```ruby
523
+ def my_action
524
+ respond_to do |format|
525
+ format.any { render(json: { foo: 'bar' }) }
526
+ end
527
+ end
382
528
 
383
- * Apply mapping to symbols returned from dynamic CSP sources
529
+ get('my_action.csv')
530
+ ```
384
531
 
385
- Previously if a dynamic source returned a symbol such as :self it
386
- would be converted to a string implicitly, e.g:
532
+ The previous behaviour was to respond with a `text/csv` Content-Type which
533
+ is inaccurate since a JSON response is being rendered.
387
534
 
388
- policy.default_src -> { :self }
535
+ Now it correctly returns a `application/json` Content-Type.
389
536
 
390
- would generate the header:
537
+ *Edouard Chin*
391
538
 
392
- Content-Security-Policy: default-src self
539
+ * Replaces (back)slashes in failure screenshot image paths with dashes.
393
540
 
394
- and now it generates:
541
+ If a failed test case contained a slash or a backslash, a screenshot would be created in a
542
+ nested directory, causing issues with `tmp:clear`.
395
543
 
396
- Content-Security-Policy: default-src 'self'
544
+ *Damir Zekic*
397
545
 
398
- *Andrew White*
546
+ * Add `params.member?` to mimic Hash behavior.
399
547
 
400
- * Add `ActionController::Parameters#each_value`.
548
+ *Younes Serraj*
401
549
 
402
- *Lukáš Zapletal*
550
+ * `process_action.action_controller` notifications now include the following in their payloads:
403
551
 
404
- * Deprecate `ActionDispatch::Http::ParameterFilter` in favor of `ActiveSupport::ParameterFilter`.
552
+ * `:request` - the `ActionDispatch::Request`
553
+ * `:response` - the `ActionDispatch::Response`
405
554
 
406
- *Yoshiyuki Kinjo*
555
+ *George Claghorn*
407
556
 
408
- * Encode Content-Disposition filenames on `send_data` and `send_file`.
409
- Previously, `send_data 'data', filename: "\u{3042}.txt"` sends
410
- `"filename=\"\u{3042}.txt\""` as Content-Disposition and it can be
411
- garbled.
412
- Now it follows [RFC 2231](https://tools.ietf.org/html/rfc2231) and
413
- [RFC 5987](https://tools.ietf.org/html/rfc5987) and sends
414
- `"filename=\"%3F.txt\"; filename*=UTF-8''%E3%81%82.txt"`.
415
- Most browsers can find filename correctly and old browsers fallback to ASCII
416
- converted name.
557
+ * Updated `ActionDispatch::Request.remote_ip` setter to clear set the instance
558
+ `remote_ip` to `nil` before setting the header that the value is derived
559
+ from.
417
560
 
418
- *Fumiaki Matsushima*
561
+ Fixes #37383.
419
562
 
420
- * Expose `ActionController::Parameters#each_key` which allows iterating over
421
- keys without allocating an array.
563
+ *Norm Provost*
422
564
 
423
- *Richard Schneeman*
565
+ * `ActionController::Base.log_at` allows setting a different log level per request.
424
566
 
425
- * Purpose metadata for signed/encrypted cookies.
567
+ ```ruby
568
+ # Use the debug level if a particular cookie is set.
569
+ class ApplicationController < ActionController::Base
570
+ log_at :debug, if: -> { cookies[:debug] }
571
+ end
572
+ ```
426
573
 
427
- Rails can now thwart attacks that attempt to copy signed/encrypted value
428
- of a cookie and use it as the value of another cookie.
574
+ *George Claghorn*
429
575
 
430
- It does so by stashing the cookie-name in the purpose field which is
431
- then signed/encrypted along with the cookie value. Then, on a server-side
432
- read, we verify the cookie-names and discard any attacked cookies.
576
+ * Allow system test screen shots to be taken more than once in
577
+ a test by prefixing the file name with an incrementing counter.
433
578
 
434
- Enable `action_dispatch.use_cookies_with_metadata` to use this feature, which
435
- writes cookies with the new purpose and expiry metadata embedded.
579
+ Add an environment variable `RAILS_SYSTEM_TESTING_SCREENSHOT_HTML` to
580
+ enable saving of HTML during a screenshot in addition to the image.
581
+ This uses the same image name, with the extension replaced with `.html`
436
582
 
437
- *Assain Jaleel*
583
+ *Tom Fakes*
438
584
 
439
- * Raises `ActionController::RespondToMismatchError` with conflicting `respond_to` invocations.
585
+ * Add `Vary: Accept` header when using `Accept` header for response.
440
586
 
441
- `respond_to` can match multiple types and lead to undefined behavior when
442
- multiple invocations are made and the types do not match:
587
+ For some requests like `/users/1`, Rails uses requests' `Accept`
588
+ header to determine what to return. And if we don't add `Vary`
589
+ in the response header, browsers might accidentally cache different
590
+ types of content, which would cause issues: e.g. javascript got displayed
591
+ instead of html content. This PR fixes these issues by adding `Vary: Accept`
592
+ in these types of requests. For more detailed problem description, please read:
443
593
 
444
- respond_to do |outer_type|
445
- outer_type.js do
446
- respond_to do |inner_type|
447
- inner_type.html { render body: "HTML" }
448
- end
449
- end
450
- end
594
+ https://github.com/rails/rails/pull/36213
451
595
 
452
- *Patrick Toomey*
596
+ Fixes #25842.
453
597
 
454
- * `ActionDispatch::Http::UploadedFile` now delegates `to_path` to its tempfile.
598
+ *Stan Lo*
455
599
 
456
- This allows uploaded file objects to be passed directly to `File.read`
457
- without raising a `TypeError`:
600
+ * Fix IntegrationTest `follow_redirect!` to follow redirection using the same HTTP verb when following
601
+ a 307 redirection.
458
602
 
459
- uploaded_file = ActionDispatch::Http::UploadedFile.new(tempfile: tmp_file)
460
- File.read(uploaded_file)
603
+ *Edouard Chin*
461
604
 
462
- *Aaron Kromer*
605
+ * System tests require Capybara 3.26 or newer.
463
606
 
464
- * Pass along arguments to underlying `get` method in `follow_redirect!`
607
+ *George Claghorn*
465
608
 
466
- Now all arguments passed to `follow_redirect!` are passed to the underlying
467
- `get` method. This for example allows to set custom headers for the
468
- redirection request to the server.
609
+ * Reduced log noise handling ActionController::RoutingErrors.
469
610
 
470
- follow_redirect!(params: { foo: :bar })
611
+ *Alberto Fernández-Capel*
471
612
 
472
- *Remo Fritzsche*
613
+ * Add DSL for configuring HTTP Feature Policy.
473
614
 
474
- * Introduce a new error page to when the implicit render page is accessed in the browser.
615
+ This new DSL provides a way to configure an HTTP Feature Policy at a
616
+ global or per-controller level. Full details of HTTP Feature Policy
617
+ specification and guidelines can be found at MDN:
475
618
 
476
- Now instead of showing an error page that with exception and backtraces we now show only
477
- one informative page.
619
+ https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Feature-Policy
478
620
 
479
- *Vinicius Stock*
621
+ Example global policy:
480
622
 
481
- * Introduce `ActionDispatch::DebugExceptions.register_interceptor`.
623
+ ```ruby
624
+ Rails.application.config.feature_policy do |f|
625
+ f.camera :none
626
+ f.gyroscope :none
627
+ f.microphone :none
628
+ f.usb :none
629
+ f.fullscreen :self
630
+ f.payment :self, "https://secure.example.com"
631
+ end
632
+ ```
482
633
 
483
- Exception aware plugin authors can use the newly introduced
484
- `.register_interceptor` method to get the processed exception, instead of
485
- monkey patching DebugExceptions.
634
+ Example controller level policy:
486
635
 
487
- ActionDispatch::DebugExceptions.register_interceptor do |request, exception|
488
- HypoteticalPlugin.capture_exception(request, exception)
489
- end
636
+ ```ruby
637
+ class PagesController < ApplicationController
638
+ feature_policy do |p|
639
+ p.geolocation "https://example.com"
640
+ end
641
+ end
642
+ ```
490
643
 
491
- *Genadi Samokovarov*
644
+ *Jacob Bednarz*
492
645
 
493
- * Output only one Content-Security-Policy nonce header value per request.
646
+ * Add the ability to set the CSP nonce only to the specified directives.
494
647
 
495
- Fixes #32597.
648
+ Fixes #35137.
496
649
 
497
- *Andrey Novikov*, *Andrew White*
650
+ *Yuji Yaginuma*
498
651
 
499
- * Move default headers configuration into their own module that can be included in controllers.
652
+ * Keep part when scope option has value.
653
+
654
+ When a route was defined within an optional scope, if that route didn't
655
+ take parameters the scope was lost when using path helpers. This commit
656
+ ensures scope is kept both when the route takes parameters or when it
657
+ doesn't.
500
658
 
501
- *Kevin Deisz*
659
+ Fixes #33219.
502
660
 
503
- * Add method `dig` to `session`.
661
+ *Alberto Almagro*
504
662
 
505
- *claudiob*, *Takumi Shotoku*
663
+ * Added `deep_transform_keys` and `deep_transform_keys!` methods to ActionController::Parameters.
506
664
 
507
- * Controller level `force_ssl` has been deprecated in favor of
508
- `config.force_ssl`.
665
+ *Gustavo Gutierrez*
509
666
 
510
- *Derek Prior*
667
+ * Calling `ActionController::Parameters#transform_keys`/`!` without a block now returns
668
+ an enumerator for the parameters instead of the underlying hash.
669
+
670
+ *Eugene Kenny*
511
671
 
512
- * Rails 6 requires Ruby 2.5.0 or newer.
672
+ * Fix strong parameters blocks all attributes even when only some keys are invalid (non-numerical).
673
+ It should only block invalid key's values instead.
513
674
 
514
- *Jeremy Daer*, *Kasper Timm Hansen*
675
+ *Stan Lo*
515
676
 
516
677
 
517
- Please check [5-2-stable](https://github.com/rails/rails/blob/5-2-stable/actionpack/CHANGELOG.md) for previous changes.
678
+ Please check [6-0-stable](https://github.com/rails/rails/blob/6-0-stable/actionpack/CHANGELOG.md) for previous changes.