Skip to content

Commit 4bc4b74

Browse files
arr-devoreoshake
authored andcommitted
Support worker-src CSP directive (#364)
* Support worker-src CSP directive * Add newline after `worker_src` const def * Remove trailing whitespace
1 parent 570d210 commit 4bc4b74

File tree

5 files changed

+11
-2
lines changed

5 files changed

+11
-2
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ SecureHeaders::Configuration.default do |config|
9595
plugin_types: %w(application/x-shockwave-flash),
9696
script_src: %w('self'),
9797
style_src: %w('unsafe-inline'),
98+
worker_src: %w('self'),
9899
upgrade_insecure_requests: true, # see https://www.w3.org/TR/upgrade-insecure-requests/
99100
report_uri: %w(https://report-uri.io/example-csp)
100101
}

lib/secure_headers/headers/content_security_policy_config.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ def initialize(hash)
3838
@script_src = nil
3939
@style_nonce = nil
4040
@style_src = nil
41+
@worker_src = nil
4142
@upgrade_insecure_requests = nil
4243

4344
from_hash(hash)

lib/secure_headers/headers/policy_management.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,10 +72,13 @@ def self.included(base)
7272
BLOCK_ALL_MIXED_CONTENT = :block_all_mixed_content
7373
MANIFEST_SRC = :manifest_src
7474
UPGRADE_INSECURE_REQUESTS = :upgrade_insecure_requests
75+
WORKER_SRC = :worker_src
76+
7577
DIRECTIVES_3_0 = [
7678
DIRECTIVES_2_0,
7779
BLOCK_ALL_MIXED_CONTENT,
7880
MANIFEST_SRC,
81+
WORKER_SRC,
7982
UPGRADE_INSECURE_REQUESTS
8083
].flatten.freeze
8184

@@ -86,6 +89,7 @@ def self.included(base)
8689
FIREFOX_UNSUPPORTED_DIRECTIVES = [
8790
BLOCK_ALL_MIXED_CONTENT,
8891
CHILD_SRC,
92+
WORKER_SRC,
8993
PLUGIN_TYPES
9094
].freeze
9195

@@ -95,6 +99,7 @@ def self.included(base)
9599

96100
FIREFOX_46_UNSUPPORTED_DIRECTIVES = [
97101
BLOCK_ALL_MIXED_CONTENT,
102+
WORKER_SRC,
98103
PLUGIN_TYPES
99104
].freeze
100105

@@ -148,6 +153,7 @@ def self.included(base)
148153
SANDBOX => :sandbox_list,
149154
SCRIPT_SRC => :source_list,
150155
STYLE_SRC => :source_list,
156+
WORKER_SRC => :source_list,
151157
UPGRADE_INSECURE_REQUESTS => :boolean
152158
}.freeze
153159

spec/lib/secure_headers/headers/content_security_policy_spec.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -143,12 +143,12 @@ module SecureHeaders
143143

144144
it "does not filter any directives for Chrome" do
145145
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'; style-src style-src.com; upgrade-insecure-requests; report-uri report-uri.com")
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'; style-src style-src.com; upgrade-insecure-requests; worker-src worker-src.com; report-uri report-uri.com")
147147
end
148148

149149
it "does not filter any directives for Opera" do
150150
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'; style-src style-src.com; upgrade-insecure-requests; report-uri report-uri.com")
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'; style-src style-src.com; upgrade-insecure-requests; worker-src worker-src.com; report-uri report-uri.com")
152152
end
153153

154154
it "filters blocked-all-mixed-content, child-src, and plugin-types for firefox" do

spec/lib/secure_headers/headers/policy_management_spec.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ module SecureHeaders
3333
object_src: %w('self'),
3434
script_src: %w('self'),
3535
style_src: %w('unsafe-inline'),
36+
worker_src: %w(worker.com),
3637
base_uri: %w('self'),
3738
form_action: %w('self' github.com),
3839
frame_ancestors: %w('none'),

0 commit comments

Comments
 (0)