Skip to content

Commit afd3258

Browse files
authored
Merge pull request #404 from will/disableappend
Add option to disable appending 'unsafe-inline' when using nonces
2 parents 84253da + cafeb21 commit afd3258

File tree

4 files changed

+10
-2
lines changed

4 files changed

+10
-2
lines changed

lib/secure_headers/headers/content_security_policy.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,8 @@ def populate_nonces(directive, source_list)
179179
# unsafe-inline, this is more concise.
180180
def append_nonce(source_list, nonce)
181181
if nonce
182-
source_list.push("'nonce-#{nonce}'", UNSAFE_INLINE)
182+
source_list.push("'nonce-#{nonce}'")
183+
source_list.push(UNSAFE_INLINE) unless @config[:disable_nonce_backwards_compatibility]
183184
end
184185

185186
source_list

lib/secure_headers/headers/content_security_policy_config.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ def initialize(hash)
4242
@style_src = nil
4343
@worker_src = nil
4444
@upgrade_insecure_requests = nil
45+
@disable_nonce_backwards_compatibility = nil
4546

4647
from_hash(hash)
4748
end

lib/secure_headers/headers/policy_management.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,8 @@ def self.included(base)
153153

154154
META_CONFIGS = [
155155
:report_only,
156-
:preserve_schemes
156+
:preserve_schemes,
157+
:disable_nonce_backwards_compatibility
157158
].freeze
158159

159160
NONCES = [

spec/lib/secure_headers/headers/content_security_policy_spec.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,11 @@ module SecureHeaders
145145
csp = ContentSecurityPolicy.new({default_src: %w('self'), script_src: [ContentSecurityPolicy::STRICT_DYNAMIC], script_nonce: 123456})
146146
expect(csp.value).to eq("default-src 'self'; script-src 'strict-dynamic' 'nonce-123456' 'unsafe-inline'")
147147
end
148+
149+
it "supports strict-dynamic and opting out of the appended 'unsafe-inline'" do
150+
csp = ContentSecurityPolicy.new({default_src: %w('self'), script_src: [ContentSecurityPolicy::STRICT_DYNAMIC], script_nonce: 123456, disable_nonce_backwards_compatibility: true })
151+
expect(csp.value).to eq("default-src 'self'; script-src 'strict-dynamic' 'nonce-123456'")
152+
end
148153
end
149154
end
150155
end

0 commit comments

Comments
 (0)