go_sso 0.5.8 → 0.5.10
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.
- checksums.yaml +4 -4
- data/lib/go_sso/controllers/helpers.rb +1 -1
- data/lib/go_sso/middleware.rb +27 -2
- data/lib/go_sso/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 56c0025727bac46c3e5aa9a3c7239e261a05f59ad67a632b9e26dd5c3675a7b0
|
|
4
|
+
data.tar.gz: 32f92f53dc0cfe892bd06289e189ec6f6e89821d3db24033b2f8ad1e6f50f661
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 31e77cbef690424689e44a45fab403d4c9a210f890d902cbad69ad13eb4d25b0fd1283f5fb03851378083a595062d8ac717b3e26c269d0cf4a380c953746128c
|
|
7
|
+
data.tar.gz: 8875f600d150648361bb60fadcaa7857faab15cbf205e4d9e398b63ff85ee7c8bf604598a8f0fe2542f5b040da4c0be64d33371b10c1fdff354703429c4775b9
|
data/lib/go_sso/middleware.rb
CHANGED
|
@@ -39,7 +39,9 @@ module GoSso
|
|
|
39
39
|
end
|
|
40
40
|
|
|
41
41
|
def request_call
|
|
42
|
-
session[:go_sso_referrer] = request.params["redirect_url"] ||
|
|
42
|
+
session[:go_sso_referrer] = safe_redirect_target(request.params["redirect_url"]) ||
|
|
43
|
+
safe_redirect_target(request.referrer) ||
|
|
44
|
+
request.base_url
|
|
43
45
|
|
|
44
46
|
if GoSso.test_mode?
|
|
45
47
|
redirect client_callback_path
|
|
@@ -50,7 +52,9 @@ module GoSso
|
|
|
50
52
|
|
|
51
53
|
def logout_call
|
|
52
54
|
set_sso_token(nil)
|
|
53
|
-
redirect request.params["redirect_url"] ||
|
|
55
|
+
redirect safe_redirect_target(request.params["redirect_url"]) ||
|
|
56
|
+
safe_redirect_target(request.referrer) ||
|
|
57
|
+
request.base_url
|
|
54
58
|
end
|
|
55
59
|
|
|
56
60
|
def callback_call
|
|
@@ -108,5 +112,26 @@ module GoSso
|
|
|
108
112
|
def url_options
|
|
109
113
|
{ script_name: request.script_name, protocol: "https" }
|
|
110
114
|
end
|
|
115
|
+
|
|
116
|
+
# Reject values that could either crash JSON cookie serialization
|
|
117
|
+
# (invalid UTF-8) or trigger an open redirect (off-host targets,
|
|
118
|
+
# protocol-relative URLs, non-http(s) schemes). Returns nil to fall
|
|
119
|
+
# back to the safe default in the caller.
|
|
120
|
+
def safe_redirect_target(url)
|
|
121
|
+
return nil unless url.is_a?(String)
|
|
122
|
+
return nil unless url.dup.force_encoding(Encoding::UTF_8).valid_encoding?
|
|
123
|
+
return nil if url.empty?
|
|
124
|
+
return nil if url.start_with?("//")
|
|
125
|
+
|
|
126
|
+
uri = URI.parse(url) rescue nil
|
|
127
|
+
return nil unless uri
|
|
128
|
+
|
|
129
|
+
if uri.absolute?
|
|
130
|
+
return nil unless %w[http https].include?(uri.scheme)
|
|
131
|
+
return nil unless uri.host&.casecmp(GoSso::Current.host.to_s) == 0
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
url
|
|
135
|
+
end
|
|
111
136
|
end
|
|
112
137
|
end
|
data/lib/go_sso/version.rb
CHANGED