@@ -116,73 +116,10 @@ module SecureHeaders
116116 ContentSecurityPolicy . new ( default_src : %w( 'self' ) , frame_src : %w( 'self' ) ) . value
117117 end
118118
119- it "raises an error when child-src and frame-src are supplied but are not equal" do
120- expect {
121- ContentSecurityPolicy . new ( default_src : %w( 'self' ) , child_src : %w( child-src.com ) , frame_src : %w( frame-src,com ) ) . value
122- } . to raise_error ( ArgumentError )
123- end
124-
125119 it "supports strict-dynamic" do
126- csp = ContentSecurityPolicy . new ( { default_src : %w( 'self' ) , script_src : [ ContentSecurityPolicy ::STRICT_DYNAMIC ] , script_nonce : 123456 } , USER_AGENTS [ :chrome ] )
120+ csp = ContentSecurityPolicy . new ( { default_src : %w( 'self' ) , script_src : [ ContentSecurityPolicy ::STRICT_DYNAMIC ] , script_nonce : 123456 } )
127121 expect ( csp . value ) . to eq ( "default-src 'self'; script-src 'strict-dynamic' 'nonce-123456' 'unsafe-inline'" )
128122 end
129-
130- context "browser sniffing" do
131- let ( :complex_opts ) do
132- ( ContentSecurityPolicy ::ALL_DIRECTIVES - [ :frame_src ] ) . each_with_object ( { } ) do |directive , hash |
133- hash [ directive ] = [ "#{ directive . to_s . gsub ( "_" , "-" ) } .com" ]
134- end . merge ( {
135- block_all_mixed_content : true ,
136- upgrade_insecure_requests : true ,
137- script_src : %w( script-src.com ) ,
138- script_nonce : 123456 ,
139- sandbox : %w( allow-forms ) ,
140- plugin_types : %w( application/pdf )
141- } )
142- end
143-
144- it "does not filter any directives for Chrome" do
145- policy = ContentSecurityPolicy . new ( complex_opts , USER_AGENTS [ :chrome ] )
146- expect ( policy . value ) . to eq ( "default-src default-src.com; base-uri base-uri.com; block-all-mixed-content; child-src child-src.com; connect-src connect-src.com; font-src font-src.com; form-action form-action.com; frame-ancestors frame-ancestors.com; img-src img-src.com; manifest-src manifest-src.com; media-src media-src.com; object-src object-src.com; plugin-types application/pdf; sandbox allow-forms; script-src script-src.com 'nonce-123456' 'unsafe-inline'; style-src style-src.com; upgrade-insecure-requests; worker-src worker-src.com; report-uri report-uri.com" )
147- end
148-
149- it "does not filter any directives for Opera" do
150- policy = ContentSecurityPolicy . new ( complex_opts , USER_AGENTS [ :opera ] )
151- expect ( policy . value ) . to eq ( "default-src default-src.com; base-uri base-uri.com; block-all-mixed-content; child-src child-src.com; connect-src connect-src.com; font-src font-src.com; form-action form-action.com; frame-ancestors frame-ancestors.com; img-src img-src.com; manifest-src manifest-src.com; media-src media-src.com; object-src object-src.com; plugin-types application/pdf; sandbox allow-forms; script-src script-src.com 'nonce-123456' 'unsafe-inline'; style-src style-src.com; upgrade-insecure-requests; worker-src worker-src.com; report-uri report-uri.com" )
152- end
153-
154- it "filters blocked-all-mixed-content, child-src, and plugin-types for firefox" do
155- policy = ContentSecurityPolicy . new ( complex_opts , USER_AGENTS [ :firefox ] )
156- expect ( policy . value ) . to eq ( "default-src default-src.com; base-uri base-uri.com; connect-src connect-src.com; font-src font-src.com; form-action form-action.com; frame-ancestors frame-ancestors.com; frame-src child-src.com; img-src img-src.com; manifest-src manifest-src.com; media-src media-src.com; object-src object-src.com; sandbox allow-forms; script-src script-src.com 'nonce-123456' 'unsafe-inline'; style-src style-src.com; upgrade-insecure-requests; report-uri report-uri.com" )
157- end
158-
159- it "filters blocked-all-mixed-content, frame-src, and plugin-types for firefox 46 and higher" do
160- policy = ContentSecurityPolicy . new ( complex_opts , USER_AGENTS [ :firefox46 ] )
161- expect ( policy . value ) . to eq ( "default-src default-src.com; base-uri base-uri.com; child-src child-src.com; connect-src connect-src.com; font-src font-src.com; form-action form-action.com; frame-ancestors frame-ancestors.com; img-src img-src.com; manifest-src manifest-src.com; media-src media-src.com; object-src object-src.com; sandbox allow-forms; script-src script-src.com 'nonce-123456' 'unsafe-inline'; style-src style-src.com; upgrade-insecure-requests; report-uri report-uri.com" )
162- end
163-
164- it "child-src value is copied to frame-src, adds 'unsafe-inline', filters base-uri, blocked-all-mixed-content, upgrade-insecure-requests, child-src, form-action, frame-ancestors, hash sources, and plugin-types for Edge" do
165- policy = ContentSecurityPolicy . new ( complex_opts , USER_AGENTS [ :edge ] )
166- expect ( policy . value ) . to eq ( "default-src default-src.com; connect-src connect-src.com; font-src font-src.com; frame-src child-src.com; img-src img-src.com; media-src media-src.com; object-src object-src.com; sandbox allow-forms; script-src script-src.com 'nonce-123456' 'unsafe-inline'; style-src style-src.com; report-uri report-uri.com" )
167- end
168-
169- it "child-src value is copied to frame-src, adds 'unsafe-inline', filters base-uri, blocked-all-mixed-content, upgrade-insecure-requests, child-src, form-action, frame-ancestors, hash sources, and plugin-types for safari" do
170- policy = ContentSecurityPolicy . new ( complex_opts , USER_AGENTS [ :safari6 ] )
171- expect ( policy . value ) . to eq ( "default-src default-src.com; connect-src connect-src.com; font-src font-src.com; frame-src child-src.com; img-src img-src.com; media-src media-src.com; object-src object-src.com; sandbox allow-forms; script-src script-src.com 'nonce-123456' 'unsafe-inline'; style-src style-src.com; report-uri report-uri.com" )
172- end
173-
174- it "adds 'unsafe-inline', filters blocked-all-mixed-content, upgrade-insecure-requests, and hash sources for safari 10 and higher" do
175- policy = ContentSecurityPolicy . new ( complex_opts , USER_AGENTS [ :safari10 ] )
176- expect ( policy . value ) . to eq ( "default-src default-src.com; base-uri base-uri.com; child-src child-src.com; connect-src connect-src.com; font-src font-src.com; form-action form-action.com; frame-ancestors frame-ancestors.com; img-src img-src.com; media-src media-src.com; object-src object-src.com; plugin-types application/pdf; sandbox allow-forms; script-src script-src.com 'nonce-123456' 'unsafe-inline'; style-src style-src.com; report-uri report-uri.com" )
177- end
178-
179- it "falls back to standard Firefox defaults when the useragent version is not present" do
180- ua = USER_AGENTS [ :firefox ] . dup
181- allow ( ua ) . to receive ( :version ) . and_return ( nil )
182- policy = ContentSecurityPolicy . new ( complex_opts , ua )
183- expect ( policy . value ) . to eq ( "default-src default-src.com; base-uri base-uri.com; connect-src connect-src.com; font-src font-src.com; form-action form-action.com; frame-ancestors frame-ancestors.com; frame-src child-src.com; img-src img-src.com; manifest-src manifest-src.com; media-src media-src.com; object-src object-src.com; sandbox allow-forms; script-src script-src.com 'nonce-123456' 'unsafe-inline'; style-src style-src.com; upgrade-insecure-requests; report-uri report-uri.com" )
184- end
185- end
186123 end
187124 end
188125end
0 commit comments