Skip to content

Commit a1ab22d

Browse files
committed
Merge pull request #161 from twitter/data-img
Allow user to disable auto data uri whitelist
2 parents 4ec1de3 + bde1e3d commit a1ab22d

File tree

2 files changed

+14
-2
lines changed

2 files changed

+14
-2
lines changed

lib/secure_headers/headers/content_security_policy.rb

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,7 @@ def initialize(config=nil, options={})
128128

129129
@disable_fill_missing = !!@config.delete(:disable_fill_missing)
130130
@enforce = !!@config.delete(:enforce)
131+
@disable_img_src_data_uri = !!@config.delete(:disable_img_src_data_uri)
131132
@tag_report_uri = !!@config.delete(:tag_report_uri)
132133
@script_hashes = @config.delete(:script_hashes) || []
133134

@@ -238,10 +239,11 @@ def report_uri_directive
238239

239240
def generic_directives
240241
header_value = ''
242+
data_uri = @disable_img_src_data_uri ? [] : ["data:"]
241243
if @config[:img_src]
242-
@config[:img_src] = @config[:img_src] + ['data:'] unless @config[:img_src].include?('data:')
244+
@config[:img_src] = @config[:img_src] + data_uri unless @config[:img_src].include?('data:')
243245
else
244-
@config[:img_src] = @config[:default_src] + ['data:']
246+
@config[:img_src] = @config[:default_src] + data_uri
245247
end
246248

247249
DIRECTIVES.each do |directive_name|

spec/lib/secure_headers/headers/content_security_policy_spec.rb

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,16 @@ def request_for user_agent, request_uri=nil, options={:ssl => false}
156156
csp = ContentSecurityPolicy.new({:default_src => 'self', :img_src => 'self', :disable_fill_missing => true}, :request => request_for(CHROME))
157157
expect(csp.value).to eq("default-src 'self'; img-src 'self' data:;")
158158
end
159+
160+
it "doesn't add a duplicate data uri if img-src specifies it already" do
161+
csp = ContentSecurityPolicy.new({:default_src => 'self', :img_src => 'self data:', :disable_fill_missing => true}, :request => request_for(CHROME))
162+
expect(csp.value).to eq("default-src 'self'; img-src 'self' data:;")
163+
end
164+
165+
it "allows the user to disable img-src data: uris auto-whitelisting" do
166+
csp = ContentSecurityPolicy.new({:default_src => 'self', :img_src => 'self', :disable_img_src_data_uri => true, :disable_fill_missing => true}, :request => request_for(CHROME))
167+
expect(csp.value).to eq("default-src 'self'; img-src 'self';")
168+
end
159169
end
160170

161171
it "fills in directives without values with default-src value" do

0 commit comments

Comments
 (0)