Skip to content

Commit e78ae24

Browse files
authored
just enough to get the trusted types directive into the csp, I think
1 parent 65c9172 commit e78ae24

File tree

3 files changed

+18
-3
lines changed

3 files changed

+18
-3
lines changed

lib/secure_headers/headers/content_security_policy.rb

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,10 +61,20 @@ def build_value
6161
build_sandbox_list_directive(directive_name)
6262
when :media_type_list
6363
build_media_type_list_directive(directive_name)
64+
when :require_trusted_types_for_list
65+
build_trusted_type_list_directive(directive_name)
6466
end
6567
end.compact.join("; ")
6668
end
6769

70+
def build_trusted_type_list_directive(directive)
71+
source_list = @config.directive_value(directive)
72+
if source_list && !source_list.empty?
73+
escaped_source_list = source_list.gsub(/[\n;]/, " ")
74+
[symbol_to_hyphen_case(directive), escaped_source_list].join(" ").strip
75+
end
76+
end
77+
6878
def build_sandbox_list_directive(directive)
6979
return unless sandbox_list = @config.directive_value(directive)
7080
max_strict_policy = case sandbox_list

lib/secure_headers/headers/policy_management.rb

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -286,7 +286,8 @@ def list_directive?(directive)
286286
source_list?(directive) ||
287287
sandbox_list?(directive) ||
288288
media_type_list?(directive) ||
289-
require_sri_for_list?(directive)
289+
require_sri_for_list?(directive) ||
290+
require_trusted_types_for_list?(directive)
290291
end
291292

292293
# For each directive in additions that does not exist in the original config,
@@ -324,6 +325,10 @@ def require_sri_for_list?(directive)
324325
DIRECTIVE_VALUE_TYPES[directive] == :require_sri_for_list
325326
end
326327

328+
def require_trusted_types_for_list?(directive)
329+
DIRECTIVE_VALUE_TYPES[directive] == :require_trusted_types_for_list
330+
end
331+
327332
# Private: Validates that the configuration has a valid type, or that it is a valid
328333
# source expression.
329334
def validate_directive!(directive, value)

spec/lib/secure_headers/headers/content_security_policy_spec.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,8 +147,8 @@ module SecureHeaders
147147
end
148148

149149
it "supports require-trusted-types-for directive" do
150-
csp = ContentSecurityPolicy.new({require_trusted_types_for: %(script)})
151-
expect(csp.value).to eq("require-trusted-types-for script")
150+
csp = ContentSecurityPolicy.new(default_src: %w('self'), require_trusted_types_for: %(script))
151+
expect(csp.value).to eq("default-src 'self'; require-trusted-types-for script")
152152
end
153153

154154
it "does not support style for require-trusted-types-for directive" do

0 commit comments

Comments
 (0)