Skip to content
This repository was archived by the owner on Apr 20, 2024. It is now read-only.

Commit 4f02ae4

Browse files
Merge pull request #75 from raphaelcruzeiro/master
Filter out sensitive data from the HTTP headers
2 parents 0e32f80 + 87c1e33 commit 4f02ae4

File tree

2 files changed

+18
-3
lines changed

2 files changed

+18
-3
lines changed

Sources/Bugsnag/BugsnagReporter.swift

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,10 +102,21 @@ extension BugsnagReporter {
102102
} else {
103103
eventRequestBody = nil
104104
}
105+
106+
var headerDict: [String : Any] = request.headers.reduce(into: [:]) { result, value in
107+
result[value.0] = value.1
108+
}
109+
strip(keys: configuration.keyFilters, from: &headerDict)
110+
111+
let filteredHeaders: [(String, String)] = headerDict.compactMap { k, v in
112+
guard let value = v as? String else { return nil }
113+
return (k, value)
114+
}
115+
105116
eventRequest = .init(
106117
body: eventRequestBody,
107118
clientIp: request.headers.forwarded.first(where: { $0.for != nil })?.for ?? request.remoteAddress?.hostname,
108-
headers: .init(uniqueKeysWithValues: request.headers.map { $0 }),
119+
headers: .init(uniqueKeysWithValues: filteredHeaders),
109120
httpMethod: request.method.string,
110121
referer: "n/a",
111122
url: request.url.string

Tests/BugsnagTests/BugsnagTests.swift

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ final class BugsnagTests: XCTestCase {
5757
app.bugsnag.configuration = .init(
5858
apiKey: "foo",
5959
releaseStage: "debug",
60-
keyFilters: ["email", "password"]
60+
keyFilters: ["email", "password", "Authorization"]
6161
)
6262
app.clients.use(.test)
6363

@@ -90,7 +90,9 @@ final class BugsnagTests: XCTestCase {
9090
application: app,
9191
method: .POST,
9292
url: "/test",
93-
on: app.eventLoopGroup.next()
93+
headers: [
94+
"Authorization": "Bearer SupErSecretT0ken!"
95+
], on: app.eventLoopGroup.next()
9496
)
9597
try request.content.encode(vapor)
9698
try request.bugsnag.report(Abort(.internalServerError, reason: "Oops")).wait()
@@ -103,13 +105,15 @@ final class BugsnagTests: XCTestCase {
103105
User.self,
104106
from: Data(payload.events[0].request!.body!.utf8)
105107
)
108+
let headers = payload.events[0].request!.headers
106109
XCTAssertEqual(user.name, "Vapor")
107110
XCTAssertEqual(user.email, "<hidden>")
108111
XCTAssertEqual(user.password, "<hidden>")
109112
XCTAssertEqual(user.user?.name, "Swift")
110113
XCTAssertEqual(user.user?.email, "<hidden>")
111114
XCTAssertEqual(user.user?.password, "<hidden>")
112115
XCTAssertNil(user.user?.user)
116+
XCTAssertEqual(headers["Authorization"], "<hidden>")
113117
}
114118
}
115119

0 commit comments

Comments
 (0)