Skip to content

Commit 76005cc

Browse files
hooliohtlhunter
authored andcommitted
Add support for setting the maximum number of concurrent transactions (#2926)
* Add support for setting the maximum number of concurrent transactions in iast operations. * Update taint tracking module to version 1.3.1.
1 parent d806fff commit 76005cc

File tree

7 files changed

+55
-14
lines changed

7 files changed

+55
-14
lines changed

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@
6464
"dependencies": {
6565
"@datadog/native-appsec": "2.0.0",
6666
"@datadog/native-iast-rewriter": "2.0.1",
67-
"@datadog/native-iast-taint-tracking": "1.1.1",
67+
"@datadog/native-iast-taint-tracking": "1.3.1",
6868
"@datadog/native-metrics": "^1.5.0",
6969
"@datadog/pprof": "^2.1.0",
7070
"@datadog/sketches-js": "^2.1.0",

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

+2-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ const overheadController = require('./overhead-controller')
66
const dc = require('diagnostics_channel')
77
const iastContextFunctions = require('./iast-context')
88
const { enableTaintTracking, disableTaintTracking, createTransaction, removeTransaction } = require('./taint-tracking')
9+
910
const telemetryLogs = require('./telemetry/logs')
1011
const IAST_ENABLED_TAG_KEY = '_dd.iast.enabled'
1112

@@ -16,7 +17,7 @@ const requestClose = dc.channel('dd-trace:incomingHttpRequestEnd')
1617

1718
function enable (config, _tracer) {
1819
enableAllAnalyzers()
19-
enableTaintTracking()
20+
enableTaintTracking(config.iast)
2021
requestStart.subscribe(onIncomingHttpRequestStart)
2122
requestClose.subscribe(onIncomingHttpRequestEnd)
2223
overheadController.configure(config.iast)
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,27 @@
11
'use strict'
22

33
const { enableRewriter, disableRewriter } = require('./rewriter')
4-
const { createTransaction, removeTransaction, enableTaintOperations, disableTaintOperations } = require('./operations')
4+
const { createTransaction,
5+
removeTransaction,
6+
setMaxTransactions,
7+
enableTaintOperations,
8+
disableTaintOperations } = require('./operations')
9+
510
const taintTrackingPlugin = require('./plugin')
611

712
module.exports = {
8-
enableTaintTracking () {
13+
enableTaintTracking (config) {
914
enableRewriter()
1015
enableTaintOperations()
1116
taintTrackingPlugin.enable()
17+
setMaxTransactions(config.maxConcurrentRequests)
1218
},
1319
disableTaintTracking () {
1420
disableRewriter()
1521
disableTaintOperations()
1622
taintTrackingPlugin.disable()
1723
},
24+
setMaxTransactions: setMaxTransactions,
1825
createTransaction: createTransaction,
1926
removeTransaction: removeTransaction
2027
}

packages/dd-trace/src/appsec/iast/taint-tracking/operations.js

+9
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,14 @@ function disableTaintOperations () {
8787
global._ddiast = TaintTrackingDummy
8888
}
8989

90+
function setMaxTransactions (transactions) {
91+
if (!transactions) {
92+
return
93+
}
94+
95+
TaintedUtils.setMaxTransactions(transactions)
96+
}
97+
9098
module.exports = {
9199
createTransaction,
92100
removeTransaction,
@@ -96,5 +104,6 @@ module.exports = {
96104
getRanges,
97105
enableTaintOperations,
98106
disableTaintOperations,
107+
setMaxTransactions,
99108
IAST_TRANSACTION_ID
100109
}

packages/dd-trace/test/appsec/iast/taint-tracking/index.spec.js

+11-2
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,21 @@ const proxyquire = require('proxyquire')
55

66
describe('IAST TaintTracking', () => {
77
let taintTracking
8+
const config = {
9+
iast: {
10+
maxConcurrentRequests: 2
11+
}
12+
}
13+
814
const rewriter = {
915
enableRewriter: sinon.spy(),
1016
disableRewriter: sinon.spy()
1117
}
1218

1319
const taintTrackingOperations = {
1420
enableTaintOperations: sinon.spy(),
15-
disableTaintOperations: sinon.spy()
21+
disableTaintOperations: sinon.spy(),
22+
setMaxTransactions: sinon.spy()
1623
}
1724

1825
const taintTrackingPlugin = {
@@ -31,10 +38,12 @@ describe('IAST TaintTracking', () => {
3138
afterEach(sinon.restore)
3239

3340
it('Should enable rewriter, taint tracking operations and plugin', () => {
34-
taintTracking.enableTaintTracking()
41+
taintTracking.enableTaintTracking(config.iast)
3542
expect(rewriter.enableRewriter).to.be.calledOnce
3643
expect(taintTrackingOperations.enableTaintOperations).to.be.calledOnce
3744
expect(taintTrackingPlugin.enable).to.be.calledOnce
45+
expect(taintTrackingOperations.setMaxTransactions)
46+
.to.have.been.calledOnceWithExactly(config.iast.maxConcurrentRequests)
3847
})
3948

4049
it('Should disable both rewriter, taint tracking operations, plugin', () => {

packages/dd-trace/test/appsec/iast/taint-tracking/taint-tracking-operations.spec.js

+15
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ describe('IAST TaintTracking Operations', () => {
1111
const taintedUtils = {
1212
createTransaction: id => id,
1313
removeTransaction: id => id,
14+
setMaxTransactions: () => {},
1415
newTaintedString: id => id,
1516
isTainted: id => id,
1617
getRanges: id => id,
@@ -101,6 +102,20 @@ describe('IAST TaintTracking Operations', () => {
101102
})
102103
})
103104

105+
describe('SetMaxTransactions', () => {
106+
it('Given a number of concurrent transactions should call setMaxTransactions', () => {
107+
const transactions = 3
108+
109+
taintTrackingOperations.setMaxTransactions(transactions)
110+
expect(taintedUtils.setMaxTransactions).to.have.been.calledOnceWithExactly(transactions)
111+
})
112+
113+
it('Given undefined as a number of concurrent transactions should not call setMaxTransactions', () => {
114+
taintTrackingOperations.setMaxTransactions()
115+
expect(taintedUtils.setMaxTransactions).not.to.have.been.called
116+
})
117+
})
118+
104119
describe('enableTaintTracking', () => {
105120
beforeEach(() => {
106121
iastContextFunctions.saveIastContext(

yarn.lock

+8-8
Original file line numberDiff line numberDiff line change
@@ -394,10 +394,10 @@
394394
dependencies:
395395
node-gyp-build "^4.5.0"
396396

397-
"@datadog/native-iast-taint-tracking@1.1.1":
398-
version "1.1.1"
399-
resolved "https://registry.yarnpkg.com/@datadog/native-iast-taint-tracking/-/native-iast-taint-tracking-1.1.1.tgz#cbeace022b6c1f3a0a40dc0000cc40079c6d4895"
400-
integrity sha512-VkESVYpVlLHqw38UHqqEYsJaJTp3+JpKIJhfB9nlQO13dYBc3Sgq/QJZNdPViU73SVsCJtuw4D0SXRyjTXP1IA==
397+
"@datadog/native-iast-taint-tracking@1.3.1":
398+
version "1.3.1"
399+
resolved "https://registry.yarnpkg.com/@datadog/native-iast-taint-tracking/-/native-iast-taint-tracking-1.3.1.tgz#49b3befc3049370f4034babcf57c3d67e9f4d56b"
400+
integrity sha512-KWKmK4/GANisxqVZ1TtGlBIOw2RIXdUO0r7361QJHiBVUxwNKmKNVDVuCTKGpRRH/0GZcxY0yVgl38ee/6HM3A==
401401
dependencies:
402402
node-gyp-build "^3.9.0"
403403

@@ -408,10 +408,10 @@
408408
dependencies:
409409
node-gyp-build "^3.9.0"
410410

411-
"@datadog/pprof@^2.0.0":
412-
version "2.0.0"
413-
resolved "https://registry.yarnpkg.com/@datadog/pprof/-/pprof-2.0.0.tgz#d6a13587ffc83779e16e271f90e363f69d5c44f6"
414-
integrity sha512-Qsy/IjB1QbPH77FGMgMUEw3PE/oA1wgXhc+Q3cnv88OOs/Q1olEvnEeu59eS2DXUBfDFVK82W2aiMrDnJT2ytA==
411+
"@datadog/pprof@^2.1.0":
412+
version "2.1.0"
413+
resolved "https://registry.yarnpkg.com/@datadog/pprof/-/pprof-2.1.0.tgz#acc8a7a2a74442cfd725abc620a5f8505dbe1807"
414+
integrity sha512-nHZ16CuwKfscNF2PKAEPMqdn5AsxHmvurwiFmPd65VoDXKWLX2Ourj/izgL/HJ4Q5LZS/yiV4lsM4d7Xwmw0zQ==
415415
dependencies:
416416
delay "^5.0.0"
417417
node-gyp-build "^3.9.0"

0 commit comments

Comments
 (0)