Skip to content

Commit ef87455

Browse files
authored
fix(appsec): improve appsec perf on object length (#8859)
* fix(appsec): improve appsec perf on object length
1 parent bf6fa2b commit ef87455

4 files changed

Lines changed: 9 additions & 6 deletions

File tree

packages/dd-trace/src/appsec/downstream_requests.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
const web = require('../plugins/util/web')
44
const log = require('../log')
5+
const { isEmpty } = require('../util')
56
const {
67
HTTP_OUTGOING_METHOD,
78
HTTP_OUTGOING_HEADERS,
@@ -137,7 +138,7 @@ function extractRequestData (ctx) {
137138
addresses[HTTP_OUTGOING_METHOD] = getMethod(options.method)
138139

139140
const headers = options?.headers
140-
if (headers && Object.keys(headers).length > 0) {
141+
if (headers && !isEmpty(headers)) {
141142
addresses[HTTP_OUTGOING_HEADERS] = lowercaseHeaderKeys(headers)
142143
}
143144

@@ -177,7 +178,7 @@ function extractResponseData (res, responseBody) {
177178
}
178179

179180
const headers = res.headers
180-
if (headers && Object.keys(headers).length > 0) {
181+
if (headers && !isEmpty(headers)) {
181182
addresses[HTTP_OUTGOING_RESPONSE_HEADERS] = headers
182183
}
183184

packages/dd-trace/src/appsec/iast/index.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
const dc = require('dc-polyfill')
44
const web = require('../../plugins/util/web')
55
const { storage } = require('../../../../datadog-core')
6+
const { isEmpty } = require('../../util')
67
const { enable: enableFsPlugin, disable: disableFsPlugin, IAST_MODULE } = require('../rasp/fs-plugin')
78
const { incomingHttpRequestStart, incomingHttpRequestEnd, responseWriteHead } = require('../channels')
89
const vulnerabilityReporter = require('./vulnerability-reporter')
@@ -96,7 +97,7 @@ function onIncomingHttpRequestEnd (data) {
9697

9798
iastResponseEnd.publish({ ...data, storedHeaders })
9899

99-
if (Object.keys(storedHeaders).length) {
100+
if (!isEmpty(storedHeaders)) {
100101
collectedResponseHeaders.delete(data.res)
101102
}
102103

@@ -118,7 +119,7 @@ function onIncomingHttpRequestEnd (data) {
118119
function onResponseWriteHeadCollect ({ res, responseHeaders = {} }) {
119120
if (!res) return
120121

121-
if (Object.keys(responseHeaders).length) {
122+
if (!isEmpty(responseHeaders)) {
122123
collectedResponseHeaders.set(res, responseHeaders)
123124
}
124125
}

packages/dd-trace/src/appsec/rasp/ssrf.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ const addresses = require('../addresses')
99
const web = require('../../plugins/util/web')
1010
const { getActiveRequest } = require('../store')
1111
const waf = require('../waf')
12+
const { isEmpty } = require('../../util')
1213
const downstream = require('../downstream_requests')
1314
const { updateRaspRuleMatchMetricTags } = require('../telemetry')
1415
const { RULE_TYPES, handleResult } = require('./utils')
@@ -85,7 +86,7 @@ function handleResponseFinish ({ ctx, res, body }) {
8586
function runResponseEvaluation (res, req, responseBody) {
8687
const responseAddresses = downstream.extractResponseData(res, responseBody)
8788

88-
if (!Object.keys(responseAddresses).length) return
89+
if (isEmpty(responseAddresses)) return
8990

9091
const raspRule = { type: RULE_TYPES.SSRF, variant: 'response' }
9192
const result = waf.run({ ephemeral: responseAddresses }, req, raspRule)

packages/dd-trace/src/appsec/reporter.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -461,7 +461,7 @@ function truncateRequestBody (target, depth = 0) {
461461
}
462462

463463
function reportRequestBody (rootSpan, requestBody, comesFromRaspAction = false) {
464-
if (!requestBody || Object.keys(requestBody).length === 0) return
464+
if (!requestBody || isEmpty(requestBody)) return
465465

466466
if (!rootSpan.meta_struct) {
467467
rootSpan.meta_struct = {}

0 commit comments

Comments
 (0)