@@ -82,7 +82,7 @@ def request_for user_agent, request_uri=nil, options={:ssl => false}
8282
8383 describe "#normalize_csp_options" do
8484 before ( :each ) do
85- default_opts [ :script_src ] << ' self none'
85+ default_opts [ :script_src ] << " ' self' ' none'"
8686 @opts = default_opts
8787 end
8888
@@ -106,7 +106,7 @@ def request_for user_agent, request_uri=nil, options={:ssl => false}
106106
107107 it "accepts procs for report-uris" do
108108 opts = {
109- :default_src => 'self' ,
109+ :default_src => " 'self'" ,
110110 :report_uri => proc { "http://lambda/result" }
111111 }
112112
@@ -131,7 +131,7 @@ def request_for user_agent, request_uri=nil, options={:ssl => false}
131131
132132 allow ( controller ) . to receive ( :current_user ) . and_return ( user )
133133 opts = {
134- :default_src => "self" ,
134+ :default_src => "' self' " ,
135135 :enforce => lambda { |c | c . current_user . beta_testing? }
136136 }
137137 csp = ContentSecurityPolicy . new ( opts , :controller => controller )
@@ -148,36 +148,24 @@ def request_for user_agent, request_uri=nil, options={:ssl => false}
148148 } . to raise_error ( RuntimeError )
149149 end
150150
151- context "CSP level 2 directives" do
152- let ( :config ) { { :default_src => 'self' } }
153- ::SecureHeaders ::ContentSecurityPolicy ::Constants ::NON_DEFAULT_SOURCES . each do |non_default_source |
154- it "supports all level 2 directives" do
155- directive_name = ::SecureHeaders ::ContentSecurityPolicy . send ( :symbol_to_hyphen_case , non_default_source )
156- config . merge! ( { non_default_source => "value" } )
157- csp = ContentSecurityPolicy . new ( config , :request => request_for ( CHROME ) )
158- expect ( csp . value ) . to match ( /#{ directive_name } value;/ )
159- end
160- end
161- end
162-
163151 context "auto-whitelists data: uris for img-src" do
164152 it "sets the value if no img-src specified" do
165- csp = ContentSecurityPolicy . new ( { :default_src => 'self' } , :request => request_for ( CHROME ) )
153+ csp = ContentSecurityPolicy . new ( { :default_src => " 'self'" } , :request => request_for ( CHROME ) )
166154 expect ( csp . value ) . to eq ( "default-src 'self'; img-src 'self' data:;" )
167155 end
168156
169157 it "appends the value if img-src is specified" do
170- csp = ContentSecurityPolicy . new ( { :default_src => 'self' , :img_src => 'self' } , :request => request_for ( CHROME ) )
158+ csp = ContentSecurityPolicy . new ( { :default_src => " 'self'" , :img_src => " 'self'" } , :request => request_for ( CHROME ) )
171159 expect ( csp . value ) . to eq ( "default-src 'self'; img-src 'self' data:;" )
172160 end
173161
174162 it "doesn't add a duplicate data uri if img-src specifies it already" do
175- csp = ContentSecurityPolicy . new ( { :default_src => 'self' , :img_src => 'self data:' } , :request => request_for ( CHROME ) )
163+ csp = ContentSecurityPolicy . new ( { :default_src => " 'self'" , :img_src => " 'self' data:" } , :request => request_for ( CHROME ) )
176164 expect ( csp . value ) . to eq ( "default-src 'self'; img-src 'self' data:;" )
177165 end
178166
179167 it "allows the user to disable img-src data: uris auto-whitelisting" do
180- csp = ContentSecurityPolicy . new ( { :default_src => 'self' , :img_src => 'self' , :disable_img_src_data_uri => true } , :request => request_for ( CHROME ) )
168+ csp = ContentSecurityPolicy . new ( { :default_src => " 'self'" , :img_src => " 'self'" , :disable_img_src_data_uri => true } , :request => request_for ( CHROME ) )
181169 expect ( csp . value ) . to eq ( "default-src 'self'; img-src 'self';" )
182170 end
183171 end
@@ -203,47 +191,47 @@ def request_for user_agent, request_uri=nil, options={:ssl => false}
203191
204192 context "when using a nonce" do
205193 it "adds a nonce and unsafe-inline to the script-src value when using chrome" do
206- header = ContentSecurityPolicy . new ( default_opts . merge ( :script_src => "self nonce" ) , :request => request_for ( CHROME ) , :controller => controller )
194+ header = ContentSecurityPolicy . new ( default_opts . merge ( :script_src => "' self' nonce" ) , :request => request_for ( CHROME ) , :controller => controller )
207195 expect ( header . value ) . to include ( "script-src 'self' 'nonce-#{ header . nonce } ' 'unsafe-inline'" )
208196 end
209197
210198 it "adds a nonce and unsafe-inline to the script-src value when using firefox" do
211- header = ContentSecurityPolicy . new ( default_opts . merge ( :script_src => "self nonce" ) , :request => request_for ( FIREFOX ) , :controller => controller )
199+ header = ContentSecurityPolicy . new ( default_opts . merge ( :script_src => "' self' nonce" ) , :request => request_for ( FIREFOX ) , :controller => controller )
212200 expect ( header . value ) . to include ( "script-src 'self' 'nonce-#{ header . nonce } ' 'unsafe-inline'" )
213201 end
214202
215203 it "adds a nonce and unsafe-inline to the script-src value when using opera" do
216- header = ContentSecurityPolicy . new ( default_opts . merge ( :script_src => "self nonce" ) , :request => request_for ( OPERA ) , :controller => controller )
204+ header = ContentSecurityPolicy . new ( default_opts . merge ( :script_src => "' self' nonce" ) , :request => request_for ( OPERA ) , :controller => controller )
217205 expect ( header . value ) . to include ( "script-src 'self' 'nonce-#{ header . nonce } ' 'unsafe-inline'" )
218206 end
219207
220208 it "does not add a nonce and unsafe-inline to the script-src value when using Safari" do
221- header = ContentSecurityPolicy . new ( default_opts . merge ( :script_src => "self nonce" ) , :request => request_for ( SAFARI ) , :controller => controller )
209+ header = ContentSecurityPolicy . new ( default_opts . merge ( :script_src => "' self' nonce" ) , :request => request_for ( SAFARI ) , :controller => controller )
222210 expect ( header . value ) . to include ( "script-src 'self' 'unsafe-inline'" )
223211 expect ( header . value ) . not_to include ( "nonce" )
224212 end
225213
226214 it "does not add a nonce and unsafe-inline to the script-src value when using IE" do
227- header = ContentSecurityPolicy . new ( default_opts . merge ( :script_src => "self nonce" ) , :request => request_for ( IE ) , :controller => controller )
215+ header = ContentSecurityPolicy . new ( default_opts . merge ( :script_src => "' self' nonce" ) , :request => request_for ( IE ) , :controller => controller )
228216 expect ( header . value ) . to include ( "script-src 'self' 'unsafe-inline'" )
229217 expect ( header . value ) . not_to include ( "nonce" )
230218 end
231219
232220 it "adds a nonce and unsafe-inline to the style-src value" do
233- header = ContentSecurityPolicy . new ( default_opts . merge ( :style_src => "self nonce" ) , :request => request_for ( CHROME ) , :controller => controller )
221+ header = ContentSecurityPolicy . new ( default_opts . merge ( :style_src => "' self' nonce" ) , :request => request_for ( CHROME ) , :controller => controller )
234222 expect ( header . value ) . to include ( "style-src 'self' 'nonce-#{ header . nonce } ' 'unsafe-inline'" )
235223 end
236224
237225 it "adds an identical nonce to the style and script-src directives" do
238- header = ContentSecurityPolicy . new ( default_opts . merge ( :style_src => "self nonce" , :script_src => "self nonce" ) , :request => request_for ( CHROME ) , :controller => controller )
226+ header = ContentSecurityPolicy . new ( default_opts . merge ( :style_src => "' self' nonce" , :script_src => "' self' nonce" ) , :request => request_for ( CHROME ) , :controller => controller )
239227 nonce = header . nonce
240228 value = header . value
241229 expect ( value ) . to include ( "style-src 'self' 'nonce-#{ nonce } ' 'unsafe-inline'" )
242230 expect ( value ) . to include ( "script-src 'self' 'nonce-#{ nonce } ' 'unsafe-inline'" )
243231 end
244232
245233 it "does not add 'unsafe-inline' twice" do
246- header = ContentSecurityPolicy . new ( default_opts . merge ( :script_src => "self nonce 'unsafe-inline'" ) , :request => request_for ( CHROME ) , :controller => controller )
234+ header = ContentSecurityPolicy . new ( default_opts . merge ( :script_src => "' self' nonce 'unsafe-inline'" ) , :request => request_for ( CHROME ) , :controller => controller )
247235 expect ( header . value ) . to include ( "script-src 'self' 'nonce-#{ header . nonce } ' 'unsafe-inline';" )
248236 end
249237 end
@@ -291,7 +279,7 @@ def request_for user_agent, request_uri=nil, options={:ssl => false}
291279
292280 describe ".add_to_env" do
293281 let ( :controller ) { double }
294- let ( :config ) { { :default_src => 'self' } }
282+ let ( :config ) { { :default_src => " 'self'" } }
295283 let ( :options ) { { :controller => controller } }
296284
297285 it "adds metadata to env" do
0 commit comments