mirror of
https://github.com/discourse/discourse.git
synced 2025-05-25 00:32:52 +08:00
FIX: StaticController#enter
should not redirect to invalid paths (#27913)
This commit updates `StaticController#enter` to not redirect to invalid paths when the `redirect` param is set. Instead it should redirect to `/` when the `redirect` param is invalid.
This commit is contained in:

committed by
GitHub

parent
5f4dc1042e
commit
a3d319ac2f
@ -133,7 +133,8 @@ class StaticController < ApplicationController
|
|||||||
forum_uri = URI(Discourse.base_url)
|
forum_uri = URI(Discourse.base_url)
|
||||||
uri = URI(redirect_location)
|
uri = URI(redirect_location)
|
||||||
|
|
||||||
if uri.path.present? && (uri.host.blank? || uri.host == forum_uri.host) && uri.path !~ /\./
|
if uri.path.present? && (uri.host.blank? || uri.host == forum_uri.host) &&
|
||||||
|
uri.path =~ %r{\A\/{1}[^\.\s]*\z}
|
||||||
destination = "#{uri.path}#{uri.query ? "?#{uri.query}" : ""}"
|
destination = "#{uri.path}#{uri.query ? "?#{uri.query}" : ""}"
|
||||||
end
|
end
|
||||||
rescue URI::Error
|
rescue URI::Error
|
||||||
@ -141,7 +142,7 @@ class StaticController < ApplicationController
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
redirect_to destination
|
redirect_to(destination, allow_other_host: false)
|
||||||
end
|
end
|
||||||
|
|
||||||
FAVICON ||= -"favicon"
|
FAVICON ||= -"favicon"
|
||||||
|
@ -290,7 +290,7 @@ RSpec.describe StaticController do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "with a full url to someone else" do
|
context "with a full url to an external host" do
|
||||||
it "redirects to the root path" do
|
it "redirects to the root path" do
|
||||||
post "/login.json", params: { redirect: "http://eviltrout.com/foo" }
|
post "/login.json", params: { redirect: "http://eviltrout.com/foo" }
|
||||||
expect(response).to redirect_to("/")
|
expect(response).to redirect_to("/")
|
||||||
@ -320,6 +320,13 @@ RSpec.describe StaticController do
|
|||||||
expect(response).to redirect_to("/")
|
expect(response).to redirect_to("/")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context "when the redirect path is invalid" do
|
||||||
|
it "redirects to the root URL" do
|
||||||
|
post "/login.json", params: { redirect: "test" }
|
||||||
|
expect(response).to redirect_to("/")
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "#service_worker_asset" do
|
describe "#service_worker_asset" do
|
||||||
|
Reference in New Issue
Block a user