actionpack 5.2.8.1 → 6.0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of actionpack might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CHANGELOG.md +274 -346
- data/MIT-LICENSE +1 -1
- data/README.rdoc +4 -3
- data/lib/abstract_controller/base.rb +4 -3
- data/lib/abstract_controller/caching/fragments.rb +6 -22
- data/lib/abstract_controller/caching.rb +1 -1
- data/lib/abstract_controller/callbacks.rb +12 -0
- data/lib/abstract_controller/collector.rb +1 -2
- data/lib/abstract_controller/helpers.rb +7 -6
- data/lib/abstract_controller/railties/routes_helpers.rb +1 -1
- data/lib/abstract_controller/translation.rb +4 -4
- data/lib/action_controller/api.rb +2 -1
- data/lib/action_controller/base.rb +2 -7
- data/lib/action_controller/caching.rb +1 -2
- data/lib/action_controller/log_subscriber.rb +8 -5
- data/lib/action_controller/metal/basic_implicit_render.rb +1 -1
- data/lib/action_controller/metal/conditional_get.rb +9 -3
- data/lib/action_controller/metal/content_security_policy.rb +0 -1
- data/lib/action_controller/metal/data_streaming.rb +5 -6
- data/lib/action_controller/metal/default_headers.rb +17 -0
- data/lib/action_controller/metal/etag_with_template_digest.rb +1 -1
- data/lib/action_controller/metal/exceptions.rb +23 -2
- data/lib/action_controller/metal/flash.rb +5 -5
- data/lib/action_controller/metal/force_ssl.rb +15 -56
- data/lib/action_controller/metal/head.rb +1 -1
- data/lib/action_controller/metal/helpers.rb +3 -4
- data/lib/action_controller/metal/http_authentication.rb +20 -21
- data/lib/action_controller/metal/implicit_render.rb +4 -14
- data/lib/action_controller/metal/instrumentation.rb +3 -6
- data/lib/action_controller/metal/live.rb +29 -31
- data/lib/action_controller/metal/mime_responds.rb +13 -2
- data/lib/action_controller/metal/params_wrapper.rb +18 -14
- data/lib/action_controller/metal/redirecting.rb +5 -5
- data/lib/action_controller/metal/renderers.rb +4 -4
- data/lib/action_controller/metal/rendering.rb +2 -3
- data/lib/action_controller/metal/request_forgery_protection.rb +25 -48
- data/lib/action_controller/metal/streaming.rb +0 -1
- data/lib/action_controller/metal/strong_parameters.rb +65 -44
- data/lib/action_controller/metal/url_for.rb +1 -1
- data/lib/action_controller/metal.rb +8 -6
- data/lib/action_controller/railties/helpers.rb +1 -1
- data/lib/action_controller/renderer.rb +17 -3
- data/lib/action_controller/template_assertions.rb +1 -1
- data/lib/action_controller/test_case.rb +7 -8
- data/lib/action_controller.rb +5 -1
- data/lib/action_dispatch/http/cache.rb +14 -11
- data/lib/action_dispatch/http/content_disposition.rb +45 -0
- data/lib/action_dispatch/http/content_security_policy.rb +28 -17
- data/lib/action_dispatch/http/filter_parameters.rb +8 -7
- data/lib/action_dispatch/http/filter_redirect.rb +1 -2
- data/lib/action_dispatch/http/headers.rb +1 -2
- data/lib/action_dispatch/http/mime_negotiation.rb +13 -6
- data/lib/action_dispatch/http/mime_type.rb +14 -8
- data/lib/action_dispatch/http/parameter_filter.rb +5 -79
- data/lib/action_dispatch/http/parameters.rb +15 -6
- data/lib/action_dispatch/http/request.rb +21 -14
- data/lib/action_dispatch/http/response.rb +40 -21
- data/lib/action_dispatch/http/upload.rb +9 -1
- data/lib/action_dispatch/http/url.rb +81 -82
- data/lib/action_dispatch/journey/formatter.rb +2 -3
- data/lib/action_dispatch/journey/gtg/builder.rb +0 -1
- data/lib/action_dispatch/journey/gtg/transition_table.rb +0 -1
- data/lib/action_dispatch/journey/nfa/simulator.rb +0 -2
- data/lib/action_dispatch/journey/nfa/transition_table.rb +0 -1
- data/lib/action_dispatch/journey/nodes/node.rb +9 -8
- data/lib/action_dispatch/journey/path/pattern.rb +6 -3
- data/lib/action_dispatch/journey/route.rb +5 -4
- data/lib/action_dispatch/journey/router/utils.rb +10 -10
- data/lib/action_dispatch/journey/router.rb +0 -4
- data/lib/action_dispatch/journey/routes.rb +0 -2
- data/lib/action_dispatch/journey/scanner.rb +10 -4
- data/lib/action_dispatch/journey/visitors.rb +1 -4
- data/lib/action_dispatch/middleware/actionable_exceptions.rb +46 -0
- data/lib/action_dispatch/middleware/callbacks.rb +2 -4
- data/lib/action_dispatch/middleware/cookies.rb +62 -78
- data/lib/action_dispatch/middleware/debug_exceptions.rb +45 -61
- data/lib/action_dispatch/middleware/debug_locks.rb +5 -5
- data/lib/action_dispatch/middleware/debug_view.rb +66 -0
- data/lib/action_dispatch/middleware/exception_wrapper.rb +49 -16
- data/lib/action_dispatch/middleware/flash.rb +1 -1
- data/lib/action_dispatch/middleware/host_authorization.rb +121 -0
- data/lib/action_dispatch/middleware/public_exceptions.rb +6 -3
- data/lib/action_dispatch/middleware/remote_ip.rb +9 -12
- data/lib/action_dispatch/middleware/request_id.rb +2 -2
- data/lib/action_dispatch/middleware/session/abstract_store.rb +0 -1
- data/lib/action_dispatch/middleware/session/cookie_store.rb +1 -7
- data/lib/action_dispatch/middleware/show_exceptions.rb +1 -2
- data/lib/action_dispatch/middleware/ssl.rb +8 -8
- data/lib/action_dispatch/middleware/stack.rb +38 -2
- data/lib/action_dispatch/middleware/static.rb +6 -7
- data/lib/action_dispatch/middleware/templates/rescues/_actions.html.erb +13 -0
- data/lib/action_dispatch/middleware/templates/rescues/_actions.text.erb +0 -0
- data/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb +3 -1
- data/lib/action_dispatch/middleware/templates/rescues/_request_and_response.text.erb +1 -1
- data/lib/action_dispatch/middleware/templates/rescues/_source.html.erb +4 -2
- data/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb +45 -35
- data/lib/action_dispatch/middleware/templates/rescues/blocked_host.html.erb +7 -0
- data/lib/action_dispatch/middleware/templates/rescues/blocked_host.text.erb +5 -0
- data/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb +26 -4
- data/lib/action_dispatch/middleware/templates/rescues/diagnostics.text.erb +1 -1
- data/lib/action_dispatch/middleware/templates/rescues/invalid_statement.html.erb +7 -4
- data/lib/action_dispatch/middleware/templates/rescues/invalid_statement.text.erb +5 -2
- data/lib/action_dispatch/middleware/templates/rescues/layout.erb +4 -0
- data/lib/action_dispatch/middleware/templates/rescues/missing_exact_template.html.erb +19 -0
- data/lib/action_dispatch/middleware/templates/rescues/missing_exact_template.text.erb +3 -0
- data/lib/action_dispatch/middleware/templates/rescues/missing_template.html.erb +2 -2
- data/lib/action_dispatch/middleware/templates/rescues/routing_error.html.erb +1 -1
- data/lib/action_dispatch/middleware/templates/rescues/template_error.html.erb +2 -2
- data/lib/action_dispatch/middleware/templates/routes/_table.html.erb +3 -0
- data/lib/action_dispatch/railtie.rb +7 -2
- data/lib/action_dispatch/request/session.rb +9 -2
- data/lib/action_dispatch/routing/inspector.rb +97 -50
- data/lib/action_dispatch/routing/mapper.rb +63 -42
- data/lib/action_dispatch/routing/polymorphic_routes.rb +3 -6
- data/lib/action_dispatch/routing/route_set.rb +25 -31
- data/lib/action_dispatch/routing/url_for.rb +2 -2
- data/lib/action_dispatch/routing.rb +21 -20
- data/lib/action_dispatch/system_test_case.rb +44 -6
- data/lib/action_dispatch/system_testing/browser.rb +38 -7
- data/lib/action_dispatch/system_testing/driver.rb +11 -2
- data/lib/action_dispatch/system_testing/test_helpers/screenshot_helper.rb +6 -5
- data/lib/action_dispatch/system_testing/test_helpers/setup_and_teardown.rb +7 -6
- data/lib/action_dispatch/testing/assertion_response.rb +0 -1
- data/lib/action_dispatch/testing/assertions/response.rb +2 -3
- data/lib/action_dispatch/testing/assertions/routing.rb +15 -3
- data/lib/action_dispatch/testing/assertions.rb +1 -1
- data/lib/action_dispatch/testing/integration.rb +33 -12
- data/lib/action_dispatch/testing/request_encoder.rb +2 -2
- data/lib/action_dispatch/testing/test_process.rb +2 -2
- data/lib/action_dispatch/testing/test_response.rb +4 -32
- data/lib/action_dispatch.rb +7 -2
- data/lib/action_pack/gem_version.rb +3 -3
- data/lib/action_pack.rb +1 -1
- metadata +30 -16
- data/lib/action_dispatch/system_testing/test_helpers/undef_methods.rb +0 -26
data/CHANGELOG.md
CHANGED
@@ -1,34 +1,40 @@
|
|
1
|
-
## Rails
|
1
|
+
## Rails 6.0.6.1 (January 17, 2023) ##
|
2
2
|
|
3
3
|
* No changes.
|
4
4
|
|
5
5
|
|
6
|
-
## Rails
|
6
|
+
## Rails 6.0.6 (September 09, 2022) ##
|
7
7
|
|
8
8
|
* No changes.
|
9
9
|
|
10
10
|
|
11
|
-
## Rails
|
11
|
+
## Rails 6.0.5.1 (July 12, 2022) ##
|
12
12
|
|
13
|
-
*
|
13
|
+
* No changes.
|
14
14
|
|
15
|
-
*Tim Wade*
|
16
15
|
|
17
|
-
## Rails
|
16
|
+
## Rails 6.0.5 (May 09, 2022) ##
|
18
17
|
|
19
18
|
* No changes.
|
20
19
|
|
21
|
-
|
20
|
+
|
21
|
+
## Rails 6.0.4.8 (April 26, 2022) ##
|
22
|
+
|
23
|
+
* Allow Content Security Policy DSL to generate for API responses.
|
24
|
+
|
25
|
+
*Tim Wade*
|
26
|
+
|
27
|
+
## Rails 6.0.4.7 (March 08, 2022) ##
|
22
28
|
|
23
29
|
* No changes.
|
24
30
|
|
25
31
|
|
26
|
-
## Rails
|
32
|
+
## Rails 6.0.4.6 (February 11, 2022) ##
|
27
33
|
|
28
34
|
* No changes.
|
29
35
|
|
30
36
|
|
31
|
-
## Rails
|
37
|
+
## Rails 6.0.4.5 (February 11, 2022) ##
|
32
38
|
|
33
39
|
* Under certain circumstances, the middleware isn't informed that the
|
34
40
|
response body has been fully closed which result in request state not
|
@@ -37,7 +43,29 @@
|
|
37
43
|
[CVE-2022-23633]
|
38
44
|
|
39
45
|
|
40
|
-
## Rails
|
46
|
+
## Rails 6.0.4.4 (December 15, 2021) ##
|
47
|
+
|
48
|
+
* Fix issue with host protection not allowing host with port in development.
|
49
|
+
|
50
|
+
|
51
|
+
## Rails 6.0.4.3 (December 14, 2021) ##
|
52
|
+
|
53
|
+
* Fix issue with host protection not allowing localhost in development.
|
54
|
+
|
55
|
+
|
56
|
+
## Rails 6.0.4.2 (December 14, 2021) ##
|
57
|
+
|
58
|
+
* Fix X_FORWARDED_HOST protection. [CVE-2021-44528]
|
59
|
+
|
60
|
+
## Rails 6.1.4.1 (August 19, 2021) ##
|
61
|
+
|
62
|
+
* [CVE-2021-22942] Fix possible open redirect in Host Authorization middleware.
|
63
|
+
|
64
|
+
Specially crafted "X-Forwarded-Host" headers in combination with certain
|
65
|
+
"allowed host" formats can cause the Host Authorization middleware in Action
|
66
|
+
Pack to redirect users to a malicious website.
|
67
|
+
|
68
|
+
## Rails 6.0.4 (June 15, 2021) ##
|
41
69
|
|
42
70
|
* Accept base64_urlsafe CSRF tokens to make forward compatible.
|
43
71
|
|
@@ -46,34 +74,29 @@
|
|
46
74
|
the CSRF token to a browser in a client-readable cookie does not work properly
|
47
75
|
out of the box: the value has to be url-encoded and decoded to survive transport.
|
48
76
|
|
49
|
-
In
|
77
|
+
In Rails 6.1, we generate Base64 urlsafe-encoded CSRF tokens, which are inherently
|
50
78
|
safe to transport. Validation accepts both urlsafe tokens, and strict-encoded
|
51
79
|
tokens for backwards compatibility.
|
52
80
|
|
53
|
-
|
54
|
-
config
|
55
|
-
|
56
|
-
In Rails 5.2.5, the CSRF token format was accidentally changed to urlsafe-encoded.
|
57
|
-
|
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.
|
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`.
|
61
83
|
|
62
84
|
```ruby
|
63
85
|
Rails.application.config.action_controller.urlsafe_csrf_tokens = true
|
64
86
|
```
|
65
87
|
|
66
|
-
If you are upgrading from 5.2.4.x, you don't need to change this configuration.
|
67
|
-
|
68
88
|
*Scott Blum*, *Étienne Barrié*
|
69
89
|
|
90
|
+
* Signed and encrypted cookies can now store `false` as their value when
|
91
|
+
`action_dispatch.use_cookies_with_metadata` is enabled.
|
70
92
|
|
71
|
-
|
93
|
+
*Rolandas Barysas*
|
72
94
|
|
73
|
-
* No changes.
|
74
95
|
|
96
|
+
## Rails 6.0.3.7 (May 05, 2021) ##
|
75
97
|
|
76
|
-
|
98
|
+
* Prevent catastrophic backtracking during mime parsing
|
99
|
+
CVE-2021-22902
|
77
100
|
|
78
101
|
* Prevent regex DoS in HTTP token authentication
|
79
102
|
CVE-2021-22904
|
@@ -88,502 +111,407 @@
|
|
88
111
|
|
89
112
|
*Gannon McGibbon*
|
90
113
|
|
91
|
-
## Rails
|
114
|
+
## Rails 6.0.3.6 (March 26, 2021) ##
|
92
115
|
|
93
116
|
* No changes.
|
94
117
|
|
95
118
|
|
96
|
-
## Rails
|
97
|
-
|
98
|
-
* No changes.
|
119
|
+
## Rails 6.0.3.5 (February 10, 2021) ##
|
99
120
|
|
121
|
+
* Prevent open redirect when allowed host starts with a dot
|
100
122
|
|
101
|
-
|
123
|
+
[CVE-2021-22881]
|
102
124
|
|
103
|
-
|
104
|
-
|
105
|
-
* [CVE-2020-8164] Return self when calling #each, #each_pair, and #each_value instead of the raw @parameters hash
|
125
|
+
Thanks to @tktech (https://hackerone.com/tktech) for reporting this
|
126
|
+
issue and the patch!
|
106
127
|
|
128
|
+
*Aaron Patterson*
|
107
129
|
|
108
|
-
## Rails 5.2.4.2 (March 19, 2020) ##
|
109
|
-
|
110
|
-
* No changes.
|
111
|
-
|
112
|
-
|
113
|
-
## Rails 5.2.4.1 (December 18, 2019) ##
|
114
|
-
|
115
|
-
* Fix possible information leak / session hijacking vulnerability.
|
116
|
-
|
117
|
-
The `ActionDispatch::Session::MemcacheStore` is still vulnerable given it requires the
|
118
|
-
gem dalli to be updated as well.
|
119
130
|
|
120
|
-
|
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)
|
131
|
+
## Rails 6.0.3.4 (October 07, 2020) ##
|
124
132
|
|
125
|
-
|
133
|
+
* [CVE-2020-8264] Prevent XSS in Actionable Exceptions
|
126
134
|
|
127
135
|
|
128
|
-
## Rails
|
136
|
+
## Rails 6.0.3.3 (September 09, 2020) ##
|
129
137
|
|
130
138
|
* No changes.
|
131
139
|
|
132
140
|
|
133
|
-
## Rails
|
141
|
+
## Rails 6.0.3.2 (June 17, 2020) ##
|
134
142
|
|
135
|
-
*
|
143
|
+
* [CVE-2020-8185] Only allow ActionableErrors if show_detailed_exceptions is enabled
|
136
144
|
|
137
|
-
|
138
|
-
it was excluded when `no-cache` was included. This change preserves the
|
139
|
-
`public` value as is.
|
145
|
+
## Rails 6.0.3.1 (May 18, 2020) ##
|
140
146
|
|
141
|
-
|
147
|
+
* [CVE-2020-8166] HMAC raw CSRF token before masking it, so it cannot be used to reconstruct a per-form token
|
142
148
|
|
143
|
-
|
149
|
+
* [CVE-2020-8164] Return self when calling #each, #each_pair, and #each_value instead of the raw @parameters hash
|
144
150
|
|
145
|
-
* Allow `nil` params for `ActionController::TestCase`.
|
146
151
|
|
147
|
-
|
152
|
+
## Rails 6.0.3 (May 06, 2020) ##
|
148
153
|
|
154
|
+
* Include child session assertion count in ActionDispatch::IntegrationTest
|
149
155
|
|
150
|
-
|
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.
|
151
159
|
|
152
|
-
|
160
|
+
Child sessions now have their `attr_accessor` overriden to delegate to the
|
161
|
+
root session.
|
153
162
|
|
163
|
+
Fixes #32142
|
154
164
|
|
155
|
-
|
165
|
+
*Sam Bostock*
|
156
166
|
|
157
|
-
* Reset Capybara sessions if failed system test screenshot raising an exception.
|
158
167
|
|
159
|
-
|
160
|
-
in system test `after_teardown`.
|
168
|
+
## Rails 6.0.2.2 (March 19, 2020) ##
|
161
169
|
|
162
|
-
|
170
|
+
* No changes.
|
163
171
|
|
164
|
-
* Use request object for context if there's no controller
|
165
172
|
|
166
|
-
|
167
|
-
mounted rack application so pass the request object as the context
|
168
|
-
when resolving dynamic CSP sources in this scenario.
|
173
|
+
## Rails 6.0.2.1 (December 18, 2019) ##
|
169
174
|
|
170
|
-
|
175
|
+
* Fix possible information leak / session hijacking vulnerability.
|
171
176
|
|
172
|
-
|
177
|
+
The `ActionDispatch::Session::MemcacheStore` is still vulnerable given it requires the
|
178
|
+
gem dalli to be updated as well.
|
173
179
|
|
174
|
-
|
180
|
+
CVE-2019-16782.
|
175
181
|
|
176
|
-
Previously if a dynamic source returned a symbol such as :self it
|
177
|
-
would be converted to a string implicity, e.g:
|
178
182
|
|
179
|
-
|
183
|
+
## Rails 6.0.2 (December 13, 2019) ##
|
180
184
|
|
181
|
-
|
185
|
+
* Allow using mountable engine route helpers in System Tests.
|
182
186
|
|
183
|
-
|
187
|
+
*Chalo Fernandez*
|
184
188
|
|
185
|
-
and now it generates:
|
186
189
|
|
187
|
-
|
190
|
+
## Rails 6.0.1 (November 5, 2019) ##
|
188
191
|
|
189
|
-
|
192
|
+
* `ActionDispatch::SystemTestCase` now inherits from `ActiveSupport::TestCase`
|
193
|
+
rather than `ActionDispatch::IntegrationTest`. This permits running jobs in
|
194
|
+
system tests.
|
190
195
|
|
191
|
-
*
|
196
|
+
*George Claghorn*, *Edouard Chin*
|
192
197
|
|
193
|
-
|
198
|
+
* Registered MIME types may contain extra flags:
|
194
199
|
|
195
|
-
|
200
|
+
```ruby
|
201
|
+
Mime::Type.register "text/html; fragment", :html_fragment
|
202
|
+
```
|
196
203
|
|
197
|
-
*
|
204
|
+
*Aaron Patterson*
|
198
205
|
|
199
206
|
|
200
|
-
## Rails
|
207
|
+
## Rails 6.0.0 (August 16, 2019) ##
|
201
208
|
|
202
209
|
* No changes.
|
203
210
|
|
204
211
|
|
205
|
-
## Rails
|
212
|
+
## Rails 6.0.0.rc2 (July 22, 2019) ##
|
206
213
|
|
207
|
-
*
|
214
|
+
* Add the ability to set the CSP nonce only to the specified directives.
|
208
215
|
|
209
|
-
|
210
|
-
there are none.
|
216
|
+
Fixes #35137.
|
211
217
|
|
212
|
-
|
218
|
+
*Yuji Yaginuma*
|
213
219
|
|
214
|
-
|
220
|
+
* Keep part when scope option has value.
|
215
221
|
|
216
|
-
|
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.
|
217
226
|
|
218
|
-
|
219
|
-
`ActionController::Parameters#transform_values!` converts hashes into
|
220
|
-
parameters.
|
227
|
+
Fixes #33219
|
221
228
|
|
222
|
-
*
|
229
|
+
*Alberto Almagro*
|
223
230
|
|
224
|
-
*
|
231
|
+
* Change `ActionDispatch::Response#content_type` to return Content-Type header as it is.
|
225
232
|
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
params.permit!
|
230
|
-
```
|
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.
|
231
236
|
|
232
|
-
|
237
|
+
If you want just MIME type, please use `ActionDispatch::Response#media_type`
|
238
|
+
instead.
|
233
239
|
|
234
|
-
|
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.
|
235
243
|
|
236
|
-
*
|
237
|
-
`ActionController::TestCase` subclasses.
|
238
|
-
|
239
|
-
*Eugene Kenny*
|
240
|
-
|
241
|
-
* Output only one Content-Security-Policy nonce header value per request.
|
244
|
+
*Yuji Yaginuma*
|
242
245
|
|
243
|
-
|
246
|
+
* Calling `ActionController::Parameters#transform_keys/!` without a block now returns
|
247
|
+
an enumerator for the parameters instead of the underlying hash.
|
244
248
|
|
245
|
-
*
|
249
|
+
*Eugene Kenny*
|
246
250
|
|
247
|
-
*
|
251
|
+
* Fix a bug where DebugExceptions throws an error when malformed query parameters are provided
|
248
252
|
|
249
|
-
|
253
|
+
*Yuki Nishijima*, *Stan Lo*
|
250
254
|
|
251
|
-
https://bugs.chromium.org/p/chromium/issues/detail?id=737678#c1
|
252
255
|
|
253
|
-
|
256
|
+
## Rails 6.0.0.rc1 (April 24, 2019) ##
|
254
257
|
|
255
|
-
*
|
258
|
+
* Make system tests take a failed screenshot in a `before_teardown` hook
|
259
|
+
rather than an `after_teardown` hook.
|
256
260
|
|
257
|
-
|
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).
|
258
264
|
|
265
|
+
*Richard Macklin*
|
259
266
|
|
260
|
-
|
267
|
+
* Introduce `ActionDispatch::ActionableExceptions`.
|
261
268
|
|
262
|
-
|
269
|
+
The `ActionDispatch::ActionableExceptions` middleware dispatches actions
|
270
|
+
from `ActiveSupport::ActionableError` descendants.
|
263
271
|
|
264
|
-
|
272
|
+
Actionable errors let's you dispatch actions from Rails' error pages.
|
265
273
|
|
266
|
-
*
|
274
|
+
*Vipul A M*, *Yao Jie*, *Genadi Samokovarov*
|
267
275
|
|
268
|
-
|
269
|
-
for a controller and/or specific actions.
|
276
|
+
* Raise an `ArgumentError` if a resource custom param contains a colon (`:`).
|
270
277
|
|
271
|
-
|
278
|
+
After this change it's not possible anymore to configure routes like this:
|
272
279
|
|
273
|
-
|
280
|
+
```
|
281
|
+
routes.draw do
|
282
|
+
resources :users, param: 'name/:sneaky'
|
283
|
+
end
|
284
|
+
```
|
274
285
|
|
275
|
-
|
276
|
-
content_security_policy false, only: :index
|
277
|
-
end
|
286
|
+
Fixes #30467.
|
278
287
|
|
279
|
-
*
|
288
|
+
*Josua Schmid*
|
280
289
|
|
281
|
-
* Add alias method `to_hash` to `to_h` for `cookies`.
|
282
|
-
Add alias method `to_h` to `to_hash` for `session`.
|
283
290
|
|
284
|
-
|
291
|
+
## Rails 6.0.0.beta3 (March 11, 2019) ##
|
285
292
|
|
286
|
-
*
|
287
|
-
to meet the minimum max-age requirement for https://hstspreload.org/.
|
293
|
+
* No changes.
|
288
294
|
|
289
|
-
*Grant Bourque*
|
290
295
|
|
291
|
-
|
296
|
+
## Rails 6.0.0.beta2 (February 25, 2019) ##
|
292
297
|
|
293
|
-
|
294
|
-
normally requires the script-src attribute of the content security
|
295
|
-
policy to include 'unsafe-inline'.
|
298
|
+
* Make debug exceptions works in an environment where ActiveStorage is not loaded.
|
296
299
|
|
297
|
-
|
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.
|
300
|
+
*Tomoyuki Kurosawa*
|
302
301
|
|
303
|
-
|
304
|
-
|
305
|
-
an XSS vulnerability which can take advantage of the nonce. It is
|
306
|
-
however an improvement on a blanket permission for inline scripts.
|
302
|
+
* `ActionDispatch::SystemTestCase.driven_by` can now be called with a block
|
303
|
+
to define specific browser capabilities.
|
307
304
|
|
308
|
-
|
309
|
-
using `nonce: true` to set the nonce value on the tag, e.g
|
305
|
+
*Edouard Chin*
|
310
306
|
|
311
|
-
<%= javascript_tag nonce: true do %>
|
312
|
-
alert('Hello, World!');
|
313
|
-
<% end %>
|
314
307
|
|
315
|
-
|
308
|
+
## Rails 6.0.0.beta1 (January 18, 2019) ##
|
316
309
|
|
317
|
-
|
310
|
+
* Remove deprecated `fragment_cache_key` helper in favor of `combined_fragment_cache_key`.
|
318
311
|
|
319
|
-
*
|
312
|
+
*Rafael Mendonça França*
|
320
313
|
|
321
|
-
|
314
|
+
* Remove deprecated methods in `ActionDispatch::TestResponse`.
|
322
315
|
|
323
|
-
|
324
|
-
|
325
|
-
params.each do |name|
|
326
|
-
puts name
|
327
|
-
end
|
328
|
-
end
|
316
|
+
`#success?`, `missing?` and `error?` were deprecated in Rails 5.2 in favor of
|
317
|
+
`#successful?`, `not_found?` and `server_error?`.
|
329
318
|
|
330
|
-
|
331
|
-
# param
|
332
|
-
# param_two
|
319
|
+
*Rafael Mendonça França*
|
333
320
|
|
334
|
-
|
321
|
+
* Introduce `ActionDispatch::HostAuthorization`.
|
335
322
|
|
336
|
-
|
323
|
+
This is a new middleware that guards against DNS rebinding attacks by
|
324
|
+
explicitly permitting the hosts a request can be made to.
|
337
325
|
|
338
|
-
|
339
|
-
|
340
|
-
params.each do |name, value|
|
341
|
-
puts name
|
342
|
-
end
|
343
|
-
end
|
326
|
+
Each host is checked with the case operator (`#===`) to support `Regexp`,
|
327
|
+
`Proc`, `IPAddr` and custom objects as host allowances.
|
344
328
|
|
345
|
-
|
346
|
-
# param
|
347
|
-
# param_two
|
329
|
+
*Genadi Samokovarov*
|
348
330
|
|
349
|
-
|
331
|
+
* Allow using `parsed_body` in `ActionController::TestCase`.
|
350
332
|
|
351
|
-
|
333
|
+
In addition to `ActionDispatch::IntegrationTest`, allow using
|
334
|
+
`parsed_body` in `ActionController::TestCase`:
|
352
335
|
|
353
|
-
|
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
|
+
```
|
354
344
|
|
355
|
-
|
356
|
-
user haven't specified manually another server.
|
345
|
+
Fixes #34676.
|
357
346
|
|
358
|
-
*
|
347
|
+
*Tobias Bühlmann*
|
359
348
|
|
360
|
-
*
|
361
|
-
default headers set.
|
349
|
+
* Raise an error on root route naming conflicts.
|
362
350
|
|
363
|
-
|
351
|
+
Raises an `ArgumentError` when multiple root routes are defined in the
|
352
|
+
same context instead of assigning nil names to subsequent roots.
|
364
353
|
|
365
|
-
*
|
354
|
+
*Gannon McGibbon*
|
366
355
|
|
367
|
-
|
356
|
+
* Allow rescue from parameter parse errors:
|
368
357
|
|
369
|
-
|
358
|
+
```
|
359
|
+
rescue_from ActionDispatch::Http::Parameters::ParseError do
|
360
|
+
head :unauthorized
|
361
|
+
end
|
362
|
+
```
|
370
363
|
|
371
|
-
|
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.
|
364
|
+
*Gannon McGibbon*, *Josh Cheek*
|
376
365
|
|
377
|
-
|
366
|
+
* Reset Capybara sessions if failed system test screenshot raising an exception.
|
378
367
|
|
379
|
-
|
368
|
+
Reset Capybara sessions if `take_failed_screenshot` raise exception
|
369
|
+
in system test `after_teardown`.
|
380
370
|
|
381
|
-
*
|
371
|
+
*Maxim Perepelitsa*
|
382
372
|
|
383
|
-
|
373
|
+
* Use request object for context if there's no controller
|
384
374
|
|
385
|
-
|
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.
|
386
378
|
|
387
|
-
Fixes #
|
379
|
+
Fixes #34200.
|
388
380
|
|
389
381
|
*Andrew White*
|
390
382
|
|
391
|
-
*
|
392
|
-
|
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:
|
396
|
-
|
397
|
-
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy
|
398
|
-
|
399
|
-
Example global policy:
|
400
|
-
|
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
|
410
|
-
|
411
|
-
Example controller overrides:
|
412
|
-
|
413
|
-
# Override policy inline
|
414
|
-
class PostsController < ApplicationController
|
415
|
-
content_security_policy do |p|
|
416
|
-
p.upgrade_insecure_requests true
|
417
|
-
end
|
418
|
-
end
|
383
|
+
* Apply mapping to symbols returned from dynamic CSP sources
|
419
384
|
|
420
|
-
|
421
|
-
|
422
|
-
content_security_policy do |p|
|
423
|
-
p.base_uri "https://www.example.com"
|
424
|
-
end
|
425
|
-
end
|
385
|
+
Previously if a dynamic source returned a symbol such as :self it
|
386
|
+
would be converted to a string implicitly, e.g:
|
426
387
|
|
427
|
-
|
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
|
388
|
+
policy.default_src -> { :self }
|
433
389
|
|
434
|
-
|
435
|
-
legacy content using the `content_security_policy_report_only`
|
436
|
-
configuration attribute, e.g;
|
390
|
+
would generate the header:
|
437
391
|
|
438
|
-
|
439
|
-
Rails.application.config.content_security_policy_report_only = true
|
392
|
+
Content-Security-Policy: default-src self
|
440
393
|
|
441
|
-
|
442
|
-
class PostsController < ApplicationController
|
443
|
-
content_security_policy_report_only only: :index
|
444
|
-
end
|
394
|
+
and now it generates:
|
445
395
|
|
446
|
-
|
447
|
-
reasons since the header is calculated at runtime.
|
396
|
+
Content-Security-Policy: default-src 'self'
|
448
397
|
|
449
398
|
*Andrew White*
|
450
399
|
|
451
|
-
*
|
452
|
-
|
453
|
-
*Yuichiro Kaneko*
|
454
|
-
|
455
|
-
* Remove deprecated `ActionController::ParamsParser::ParseError`.
|
456
|
-
|
457
|
-
*Rafael Mendonça França*
|
458
|
-
|
459
|
-
* Add `:allow_other_host` option to `redirect_back` method.
|
400
|
+
* Add `ActionController::Parameters#each_value`.
|
460
401
|
|
461
|
-
|
462
|
-
different host. `allow_other_host` is `true` by default.
|
402
|
+
*Lukáš Zapletal*
|
463
403
|
|
464
|
-
|
404
|
+
* Deprecate `ActionDispatch::Http::ParameterFilter` in favor of `ActiveSupport::ParameterFilter`.
|
465
405
|
|
466
|
-
*
|
467
|
-
|
468
|
-
*Yuji Yaginuma*
|
469
|
-
|
470
|
-
* Add ability to enable Early Hints for HTTP/2
|
471
|
-
|
472
|
-
If supported by the server, and enabled in Puma this allows H2 Early Hints to be used.
|
473
|
-
|
474
|
-
The `javascript_include_tag` and the `stylesheet_link_tag` automatically add Early Hints if requested.
|
475
|
-
|
476
|
-
*Eileen M. Uchitelle*, *Aaron Patterson*
|
477
|
-
|
478
|
-
* Simplify cookies middleware with key rotation support
|
406
|
+
*Yoshiyuki Kinjo*
|
479
407
|
|
480
|
-
|
481
|
-
`
|
482
|
-
|
483
|
-
|
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.
|
484
417
|
|
485
|
-
*
|
418
|
+
*Fumiaki Matsushima*
|
486
419
|
|
487
|
-
*
|
420
|
+
* Expose `ActionController::Parameters#each_key` which allows iterating over
|
421
|
+
keys without allocating an array.
|
488
422
|
|
489
|
-
|
490
|
-
connection sharing and open request detection work correctly by default.
|
423
|
+
*Richard Schneeman*
|
491
424
|
|
492
|
-
|
425
|
+
* Purpose metadata for signed/encrypted cookies.
|
493
426
|
|
494
|
-
|
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.
|
495
429
|
|
496
|
-
|
497
|
-
|
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.
|
498
433
|
|
499
|
-
|
434
|
+
Enable `action_dispatch.use_cookies_with_metadata` to use this feature, which
|
435
|
+
writes cookies with the new purpose and expiry metadata embedded.
|
500
436
|
|
501
437
|
*Assain Jaleel*
|
502
438
|
|
503
|
-
*
|
504
|
-
|
505
|
-
Rails can thwart attacks by malicious clients that don't honor a cookie's expiry.
|
506
|
-
|
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.
|
439
|
+
* Raises `ActionController::RespondToMismatchError` with conflicting `respond_to` invocations.
|
510
440
|
|
511
|
-
|
441
|
+
`respond_to` can match multiple types and lead to undefined behavior when
|
442
|
+
multiple invocations are made and the types do not match:
|
512
443
|
|
513
|
-
|
514
|
-
|
515
|
-
|
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
|
516
451
|
|
517
|
-
|
452
|
+
*Patrick Toomey*
|
518
453
|
|
519
|
-
|
454
|
+
* `ActionDispatch::Http::UploadedFile` now delegates `to_path` to its tempfile.
|
520
455
|
|
521
|
-
|
456
|
+
This allows uploaded file objects to be passed directly to `File.read`
|
457
|
+
without raising a `TypeError`:
|
522
458
|
|
523
|
-
|
524
|
-
|
525
|
-
use the response helpers provided by `Rack::Response`.
|
459
|
+
uploaded_file = ActionDispatch::Http::UploadedFile.new(tempfile: tmp_file)
|
460
|
+
File.read(uploaded_file)
|
526
461
|
|
527
|
-
*
|
462
|
+
*Aaron Kromer*
|
528
463
|
|
529
|
-
*
|
464
|
+
* Pass along arguments to underlying `get` method in `follow_redirect!`
|
530
465
|
|
531
|
-
|
532
|
-
|
533
|
-
|
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.
|
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.
|
536
469
|
|
537
|
-
|
470
|
+
follow_redirect!(params: { foo: :bar })
|
538
471
|
|
539
|
-
*
|
472
|
+
*Remo Fritzsche*
|
540
473
|
|
541
|
-
|
474
|
+
* Introduce a new error page to when the implicit render page is accessed in the browser.
|
542
475
|
|
543
|
-
|
476
|
+
Now instead of showing an error page that with exception and backtraces we now show only
|
477
|
+
one informative page.
|
544
478
|
|
545
|
-
|
546
|
-
`driven_by` will register the driver and set additional options passed via
|
547
|
-
the `:options` parameter.
|
479
|
+
*Vinicius Stock*
|
548
480
|
|
549
|
-
|
481
|
+
* Introduce `ActionDispatch::DebugExceptions.register_interceptor`.
|
550
482
|
|
551
|
-
|
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.
|
552
486
|
|
553
|
-
|
487
|
+
ActionDispatch::DebugExceptions.register_interceptor do |request, exception|
|
488
|
+
HypoteticalPlugin.capture_exception(request, exception)
|
489
|
+
end
|
554
490
|
|
555
|
-
|
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.
|
491
|
+
*Genadi Samokovarov*
|
560
492
|
|
561
|
-
|
493
|
+
* Output only one Content-Security-Policy nonce header value per request.
|
562
494
|
|
563
|
-
|
495
|
+
Fixes #32597.
|
564
496
|
|
565
|
-
|
566
|
-
^template path ^template tree digest ^class ^id
|
497
|
+
*Andrey Novikov*, *Andrew White*
|
567
498
|
|
568
|
-
|
499
|
+
* Move default headers configuration into their own module that can be included in controllers.
|
569
500
|
|
570
|
-
*
|
571
|
-
`ActiveSupport::Cache` stores and relies on the fact that Active Record has split `#cache_key` and `#cache_version`
|
572
|
-
to support it.
|
501
|
+
*Kevin Deisz*
|
573
502
|
|
574
|
-
|
503
|
+
* Add method `dig` to `session`.
|
575
504
|
|
576
|
-
*
|
505
|
+
*claudiob*, *Takumi Shotoku*
|
577
506
|
|
578
|
-
|
579
|
-
|
580
|
-
may not exist in a certain implementation.
|
507
|
+
* Controller level `force_ssl` has been deprecated in favor of
|
508
|
+
`config.force_ssl`.
|
581
509
|
|
582
|
-
|
510
|
+
*Derek Prior*
|
583
511
|
|
584
|
-
|
512
|
+
* Rails 6 requires Ruby 2.5.0 or newer.
|
585
513
|
|
586
|
-
*
|
514
|
+
*Jeremy Daer*, *Kasper Timm Hansen*
|
587
515
|
|
588
516
|
|
589
|
-
Please check [5-
|
517
|
+
Please check [5-2-stable](https://github.com/rails/rails/blob/5-2-stable/actionpack/CHANGELOG.md) for previous changes.
|