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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fd3b3fb5b7b7ac16da845dd17e71ad1efec05c78af8589441a05b4c32257e2c4
4
- data.tar.gz: 9030fc306149139592ad074def983b88cd124fd9ad6269385cfb45d2dd1829c0
3
+ metadata.gz: 56c0025727bac46c3e5aa9a3c7239e261a05f59ad67a632b9e26dd5c3675a7b0
4
+ data.tar.gz: 32f92f53dc0cfe892bd06289e189ec6f6e89821d3db24033b2f8ad1e6f50f661
5
5
  SHA512:
6
- metadata.gz: 6aa1b8e5866239c3b079a2f5b11e99db9f66a8d4eb6ebd4873eb7d262c75e104d88c7e7fe9dc43a0b5c34cdde9b04280265cb8aae26c7b7fd814c1ac3ecd4579
7
- data.tar.gz: f8370f36052282c58fbffe43209b55ad2310df3673ad6c83f3f6768b18d6b8fdc53335b59be759e707a78d78a6f7d1594210d16c17b2fae283914ff921c1d9c4
6
+ metadata.gz: 31e77cbef690424689e44a45fab403d4c9a210f890d902cbad69ad13eb4d25b0fd1283f5fb03851378083a595062d8ac717b3e26c269d0cf4a380c953746128c
7
+ data.tar.gz: 8875f600d150648361bb60fadcaa7857faab15cbf205e4d9e398b63ff85ee7c8bf604598a8f0fe2542f5b040da4c0be64d33371b10c1fdff354703429c4775b9
@@ -4,7 +4,7 @@ module GoSso
4
4
  extend ActiveSupport::Concern
5
5
 
6
6
  included do
7
- helper_method :current_sso_user
7
+ helper_method :current_sso_user if respond_to?(:helper_method)
8
8
 
9
9
  rescue_from GoSso::FailedToOpenConnection do
10
10
  render json: {
@@ -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"] || request.referrer || request.base_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"] || request.referrer || request.base_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
@@ -1,3 +1,3 @@
1
1
  module GoSso
2
- VERSION = '0.5.8'
2
+ VERSION = '0.5.10'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: go_sso
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.8
4
+ version: 0.5.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yi Feng