Skip to content

Commit 0a25315

Browse files
authored
Merge pull request #30 from grahamburgsma/allow-no-xss
Allow setting no XSS header
2 parents e1369d2 + eaa50ed commit 0a25315

File tree

3 files changed

+15
-4
lines changed

3 files changed

+15
-4
lines changed

Sources/VaporSecurityHeaders/SecurityHeaders.swift

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,17 @@ public struct SecurityHeaders {
77
init(contentTypeConfiguration: ContentTypeOptionsConfiguration = ContentTypeOptionsConfiguration(option: .nosniff),
88
contentSecurityPolicyConfiguration: ContentSecurityPolicyConfiguration = ContentSecurityPolicyConfiguration(value: ContentSecurityPolicy().defaultSrc(sources: CSPKeywords.`self`)),
99
frameOptionsConfiguration: FrameOptionsConfiguration = FrameOptionsConfiguration(option: .deny),
10-
xssProtectionConfiguration: XSSProtectionConfiguration = XSSProtectionConfiguration(),
10+
xssProtectionConfiguration: XSSProtectionConfiguration? = XSSProtectionConfiguration(),
1111
hstsConfiguration: StrictTransportSecurityConfiguration? = nil,
1212
serverConfiguration: ServerConfiguration? = nil,
1313
contentSecurityPolicyReportOnlyConfiguration: ContentSecurityPolicyReportOnlyConfiguration? = nil,
1414
referrerPolicyConfiguration: ReferrerPolicyConfiguration? = nil) {
15-
configurations = [contentTypeConfiguration, contentSecurityPolicyConfiguration, frameOptionsConfiguration, xssProtectionConfiguration]
15+
configurations = [contentTypeConfiguration, contentSecurityPolicyConfiguration, frameOptionsConfiguration]
1616

17+
if let xssProtectionConfiguration {
18+
configurations.append(xssProtectionConfiguration)
19+
}
20+
1721
if let hstsConfiguration = hstsConfiguration {
1822
configurations.append(hstsConfiguration)
1923
}

Sources/VaporSecurityHeaders/SecurityHeadersFactory.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ public class SecurityHeadersFactory {
44
var contentTypeOptions = ContentTypeOptionsConfiguration(option: .nosniff)
55
var contentSecurityPolicy = ContentSecurityPolicyConfiguration(value: ContentSecurityPolicy().defaultSrc(sources: CSPKeywords.`self`))
66
var frameOptions = FrameOptionsConfiguration(option: .deny)
7-
var xssProtection = XSSProtectionConfiguration()
7+
var xssProtection: XSSProtectionConfiguration? = XSSProtectionConfiguration()
88
var hsts: StrictTransportSecurityConfiguration?
99
var server: ServerConfiguration?
1010
var referrerPolicy: ReferrerPolicyConfiguration?
@@ -33,7 +33,7 @@ public class SecurityHeadersFactory {
3333
return self
3434
}
3535

36-
@discardableResult public func with(XSSProtection configuration: XSSProtectionConfiguration) -> SecurityHeadersFactory {
36+
@discardableResult public func with(XSSProtection configuration: XSSProtectionConfiguration?) -> SecurityHeadersFactory {
3737
xssProtection = configuration
3838
return self
3939
}

Tests/VaporSecurityHeadersTests/HeaderTests.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,13 @@ class HeaderTests: XCTestCase {
140140

141141
XCTAssertEqual("0", response.headers[.xssProtection].first)
142142
}
143+
144+
func testHeaderWithXssProtectionDisabled() throws {
145+
let factory = SecurityHeadersFactory().with(XSSProtection: nil)
146+
let response = try makeTestResponse(for: request, securityHeadersToAdd: factory)
147+
148+
XCTAssertNil(response.headers[.xssProtection].first)
149+
}
143150

144151
func testHeaderWithHSTSwithMaxAge() throws {
145152
let hstsConfig = StrictTransportSecurityConfiguration(maxAge: 30)

0 commit comments

Comments
 (0)