File tree Expand file tree Collapse file tree 3 files changed +19
-2
lines changed
Expand file tree Collapse file tree 3 files changed +19
-2
lines changed Original file line number Diff line number Diff line change @@ -8,6 +8,7 @@ class ContentSecurityPolicy
88
99 # constants to be used for version-specific UA sniffing
1010 VERSION_46 = ::UserAgent ::Version . new ( "46" )
11+ VERSION_10 = ::UserAgent ::Version . new ( "10" )
1112
1213 def initialize ( config = nil , user_agent = OTHER )
1314 @config = if config . is_a? ( Hash )
@@ -223,7 +224,8 @@ def supported_directives
223224 end
224225
225226 def nonces_supported?
226- @nonces_supported ||= MODERN_BROWSERS . include? ( @parsed_ua . browser )
227+ @nonces_supported ||= MODERN_BROWSERS . include? ( @parsed_ua . browser ) ||
228+ @parsed_ua . browser == "Safari" && @parsed_ua . version >= VERSION_10
227229 end
228230
229231 def symbol_to_hyphen_case ( sym )
Original file line number Diff line number Diff line change @@ -277,6 +277,20 @@ module SecureHeaders
277277 expect ( hash [ 'Content-Security-Policy' ] ) . to eq ( "default-src 'self'; script-src mycdn.com 'nonce-#{ nonce } '; style-src 'self'" )
278278 end
279279
280+ it "uses a nonce for safari 10+" do
281+ Configuration . default do |config |
282+ config . csp = {
283+ default_src : %w( 'self' ) ,
284+ script_src : %w( mycdn.com )
285+ }
286+ end
287+
288+ safari_request = Rack ::Request . new ( request . env . merge ( "HTTP_USER_AGENT" => USER_AGENTS [ :safari10 ] ) )
289+ nonce = SecureHeaders . content_security_policy_script_nonce ( safari_request )
290+ hash = SecureHeaders . header_hash_for ( safari_request )
291+ expect ( hash [ 'Content-Security-Policy' ] ) . to eq ( "default-src 'self'; script-src mycdn.com 'nonce-#{ nonce } '" )
292+ end
293+
280294 it "supports the deprecated `report_only: true` format" do
281295 expect ( Kernel ) . to receive ( :warn ) . once
282296
Original file line number Diff line number Diff line change 2121 ios6 : "Mozilla/5.0 (iPhone; CPU iPhone OS 614 like Mac OS X) AppleWebKit/536.26 (KHTML like Gecko) Version/6.0 Mobile/10B350 Safari/8536.25" ,
2222 safari5 : "Mozilla/5.0 (iPad; CPU OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko ) Version/5.1 Mobile/9B176 Safari/7534.48.3" ,
2323 safari5_1 : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10" ,
24- safari6 : "Mozilla/5.0 (Macintosh; Intel Mac OS X 1084) AppleWebKit/536.30.1 (KHTML like Gecko) Version/6.0.5 Safari/536.30.1"
24+ safari6 : "Mozilla/5.0 (Macintosh; Intel Mac OS X 1084) AppleWebKit/536.30.1 (KHTML like Gecko) Version/6.0.5 Safari/536.30.1" ,
25+ safari10 : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/602.2.11 (KHTML, like Gecko) Version/10.0.1 Safari/602.2.11"
2526}
2627
2728def expect_default_values ( hash )
You can’t perform that action at this time.
0 commit comments