@js-recon/js-recon 1.4.3 → 1.4.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/build-and-prettify.yaml +6 -6
- package/.github/workflows/rules-smoke-test.yaml +2 -2
- package/CHANGELOG.md +19 -0
- package/README.md +52 -0
- package/build/analyze/helpers/initRules.js +34 -16
- package/build/analyze/helpers/initRules.js.map +1 -1
- package/build/completion/index.js +44 -3
- package/build/completion/index.js.map +1 -1
- package/build/config/applicationConfig.js +493 -0
- package/build/config/applicationConfig.js.map +1 -0
- package/build/fingerprint/index.js +8 -19
- package/build/fingerprint/index.js.map +1 -1
- package/build/globalConfig.js +1 -1
- package/build/index.js +62 -10
- package/build/index.js.map +1 -1
- package/build/lazyLoad/downloadFilesUtil.js +40 -32
- package/build/lazyLoad/downloadFilesUtil.js.map +1 -1
- package/build/lazyLoad/downloadQueue.js +150 -50
- package/build/lazyLoad/downloadQueue.js.map +1 -1
- package/build/lazyLoad/downloadResponse.js +112 -0
- package/build/lazyLoad/downloadResponse.js.map +1 -0
- package/build/lazyLoad/globals.js +4 -0
- package/build/lazyLoad/globals.js.map +1 -1
- package/build/lazyLoad/index.js +188 -115
- package/build/lazyLoad/index.js.map +1 -1
- package/build/lazyLoad/next_js/NextJsCrawler.js +3 -2
- package/build/lazyLoad/next_js/NextJsCrawler.js.map +1 -1
- package/build/lazyLoad/next_js/next_GetLazyResourcesWebpackJs.js +8 -9
- package/build/lazyLoad/next_js/next_GetLazyResourcesWebpackJs.js.map +1 -1
- package/build/lazyLoad/next_js/next_SubsequentRequests.js +93 -93
- package/build/lazyLoad/next_js/next_SubsequentRequests.js.map +1 -1
- package/build/lazyLoad/outputPath.js +92 -0
- package/build/lazyLoad/outputPath.js.map +1 -0
- package/build/lazyLoad/react/react_followImports.js +15 -5
- package/build/lazyLoad/react/react_followImports.js.map +1 -1
- package/build/lazyLoad/react/react_getScriptTags.js +11 -6
- package/build/lazyLoad/react/react_getScriptTags.js.map +1 -1
- package/build/lazyLoad/react/react_sourcemapUrls.js +3 -2
- package/build/lazyLoad/react/react_sourcemapUrls.js.map +1 -1
- package/build/lazyLoad/react/react_webpackChunkPaths.js +2 -1
- package/build/lazyLoad/react/react_webpackChunkPaths.js.map +1 -1
- package/build/lazyLoad/techDetect/index.js +93 -59
- package/build/lazyLoad/techDetect/index.js.map +1 -1
- package/build/lazyLoad/vue/vue_RuntimeJs.js +20 -15
- package/build/lazyLoad/vue/vue_RuntimeJs.js.map +1 -1
- package/build/lazyLoad/vue/vue_SingleJsFileOnHome.js +8 -3
- package/build/lazyLoad/vue/vue_SingleJsFileOnHome.js.map +1 -1
- package/build/lazyLoad/vue/vue_discoverJsFiles.js +10 -9
- package/build/lazyLoad/vue/vue_discoverJsFiles.js.map +1 -1
- package/build/lazyLoad/vue/vue_getClientSidePaths.js +69 -45
- package/build/lazyLoad/vue/vue_getClientSidePaths.js.map +1 -1
- package/build/lazyLoad/vue/vue_jsImports.js +3 -2
- package/build/lazyLoad/vue/vue_jsImports.js.map +1 -1
- package/build/lazyLoad/vue/vue_pageSrc.js +2 -1
- package/build/lazyLoad/vue/vue_pageSrc.js.map +1 -1
- package/build/lazyLoad/vue/vue_reconstructSourceMaps.js +4 -3
- package/build/lazyLoad/vue/vue_reconstructSourceMaps.js.map +1 -1
- package/build/lazyLoad/vue/vue_recursiveClientSidePathDownload.js +9 -20
- package/build/lazyLoad/vue/vue_recursiveClientSidePathDownload.js.map +1 -1
- package/build/lazyLoad/vue/vue_severalJsFilesHome.js +2 -1
- package/build/lazyLoad/vue/vue_severalJsFilesHome.js.map +1 -1
- package/build/lazyLoad/vue/vue_stringJsFiles.js +28 -25
- package/build/lazyLoad/vue/vue_stringJsFiles.js.map +1 -1
- package/build/lazyLoad/vue/vue_viteMapDeps.js +8 -2
- package/build/lazyLoad/vue/vue_viteMapDeps.js.map +1 -1
- package/build/proxy/checkFeasibility.js +8 -4
- package/build/proxy/checkFeasibility.js.map +1 -1
- package/build/proxy/checkFireWallBlocking.js +23 -13
- package/build/proxy/checkFireWallBlocking.js.map +1 -1
- package/build/proxy/detectBlockedResponse.js +203 -0
- package/build/proxy/detectBlockedResponse.js.map +1 -0
- package/build/proxy/genReq.js +434 -127
- package/build/proxy/genReq.js.map +1 -1
- package/build/proxy/oxylabsFallback.js +110 -0
- package/build/proxy/oxylabsFallback.js.map +1 -0
- package/build/proxy/proxyFeasibilityRequest.js +11 -9
- package/build/proxy/proxyFeasibilityRequest.js.map +1 -1
- package/build/run/cancellableStep.js +27 -0
- package/build/run/cancellableStep.js.map +1 -0
- package/build/run/index.js +75 -107
- package/build/run/index.js.map +1 -1
- package/build/run/outputDirectory.js +377 -0
- package/build/run/outputDirectory.js.map +1 -0
- package/build/sourcemaps/index.js +109 -23
- package/build/sourcemaps/index.js.map +1 -1
- package/build/strings/index.js +12 -5
- package/build/strings/index.js.map +1 -1
- package/build/utility/downloadProgress.js +99 -0
- package/build/utility/downloadProgress.js.map +1 -0
- package/build/utility/makeReq.js +490 -257
- package/build/utility/makeReq.js.map +1 -1
- package/build/utility/progressLog.js +64 -4
- package/build/utility/progressLog.js.map +1 -1
- package/build/utility/targetInputs.js +177 -0
- package/build/utility/targetInputs.js.map +1 -0
- package/build/utility/urlUtils.js +37 -1
- package/build/utility/urlUtils.js.map +1 -1
- package/config.dist.yaml +251 -0
- package/package.json +2 -2
|
@@ -10,7 +10,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
10
10
|
import chalk from "chalk";
|
|
11
11
|
import cliProgress from "cli-progress";
|
|
12
12
|
import makeRequest from "../../utility/makeReq.js";
|
|
13
|
-
import {
|
|
13
|
+
import { activateBarLogger, computeBarSize, watchBarResize, withProgressResources } from "../../utility/progressLog.js";
|
|
14
14
|
import parser from "@babel/parser";
|
|
15
15
|
import { extractStrings } from "../../strings/index.js";
|
|
16
16
|
import { runWithConcurrency } from "../../utility/concurrency.js";
|
|
@@ -106,24 +106,28 @@ const fetchAndExtractJsStrings = (url, maxJsSizeMb) => __awaiter(void 0, void 0,
|
|
|
106
106
|
* known JS file for references that end in `.js` and resolving them against
|
|
107
107
|
* the file's own URL.
|
|
108
108
|
*/
|
|
109
|
-
const vue_stringJsFiles = (knownJsFiles_1, ...args_1) => __awaiter(void 0, [knownJsFiles_1, ...args_1], void 0, function* (knownJsFiles, maxJsSizeMb = 2, threads = 1) {
|
|
109
|
+
const vue_stringJsFiles = (knownJsFiles_1, ...args_1) => __awaiter(void 0, [knownJsFiles_1, ...args_1], void 0, function* (knownJsFiles, maxJsSizeMb = 2, threads = 1, showProgress = true) {
|
|
110
110
|
const allFound = new Set();
|
|
111
111
|
const crawled = new Set(knownJsFiles);
|
|
112
|
-
const bar =
|
|
113
|
-
|
|
114
|
-
"[
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
112
|
+
const bar = showProgress
|
|
113
|
+
? new cliProgress.SingleBar({
|
|
114
|
+
format: chalk.cyan("[i] Scanning JS string refs ") +
|
|
115
|
+
"[{bar}] {percentage}% | {value}/{total} files | {refs} refs found",
|
|
116
|
+
barCompleteChar: "█",
|
|
117
|
+
barIncompleteChar: "░",
|
|
118
|
+
barsize: computeBarSize(72),
|
|
119
|
+
hideCursor: false,
|
|
120
|
+
clearOnComplete: false,
|
|
121
|
+
stopOnComplete: false,
|
|
122
|
+
}, cliProgress.Presets.shades_classic)
|
|
123
|
+
: null;
|
|
122
124
|
let processed = 0;
|
|
123
125
|
let totalKnown = knownJsFiles.length;
|
|
124
|
-
bar.start(totalKnown, 0, { refs: 0 });
|
|
125
|
-
const stopBarWatcher = watchBarResize(bar, 72);
|
|
126
|
-
|
|
126
|
+
bar === null || bar === void 0 ? void 0 : bar.start(totalKnown, 0, { refs: 0 });
|
|
127
|
+
const stopBarWatcher = bar ? watchBarResize(bar, 72) : () => undefined;
|
|
128
|
+
const releaseBarLogger = bar
|
|
129
|
+
? activateBarLogger({ log: (s) => process.stdout.write("\r\x1b[K" + s) }, process.stdout.isTTY === true)
|
|
130
|
+
: () => undefined;
|
|
127
131
|
const processFile = (url, newFiles) => __awaiter(void 0, void 0, void 0, function* () {
|
|
128
132
|
const discovered = yield fetchAndExtractJsStrings(url, maxJsSizeMb);
|
|
129
133
|
for (const u of discovered) {
|
|
@@ -132,23 +136,22 @@ const vue_stringJsFiles = (knownJsFiles_1, ...args_1) => __awaiter(void 0, [know
|
|
|
132
136
|
crawled.add(u);
|
|
133
137
|
newFiles.push(u);
|
|
134
138
|
totalKnown++;
|
|
135
|
-
bar.setTotal(totalKnown);
|
|
139
|
+
bar === null || bar === void 0 ? void 0 : bar.setTotal(totalKnown);
|
|
136
140
|
}
|
|
137
141
|
}
|
|
138
142
|
processed++;
|
|
139
|
-
bar.update(processed, { refs: allFound.size });
|
|
143
|
+
bar === null || bar === void 0 ? void 0 : bar.update(processed, { refs: allFound.size });
|
|
140
144
|
});
|
|
141
145
|
// Fixpoint discovery, processed in rounds: each round's batch is fetched
|
|
142
146
|
// concurrently, and any newly-discovered files seed the next round.
|
|
143
147
|
let currentBatch = [...knownJsFiles];
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
setActiveBarLogger(null);
|
|
148
|
+
yield withProgressResources(() => __awaiter(void 0, void 0, void 0, function* () {
|
|
149
|
+
while (currentBatch.length > 0) {
|
|
150
|
+
const newFiles = [];
|
|
151
|
+
yield runWithConcurrency(currentBatch, threads, (url) => processFile(url, newFiles));
|
|
152
|
+
currentBatch = newFiles;
|
|
153
|
+
}
|
|
154
|
+
}), () => bar === null || bar === void 0 ? void 0 : bar.stop(), stopBarWatcher, releaseBarLogger);
|
|
152
155
|
return [...allFound];
|
|
153
156
|
});
|
|
154
157
|
export default vue_stringJsFiles;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vue_stringJsFiles.js","sourceRoot":"","sources":["../../../src/lazyLoad/vue/vue_stringJsFiles.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,WAAW,MAAM,cAAc,CAAC;AACvC,OAAO,WAAW,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"vue_stringJsFiles.js","sourceRoot":"","sources":["../../../src/lazyLoad/vue/vue_stringJsFiles.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,6 +14,7 @@ import _traverse from "@babel/traverse";
|
|
|
14
14
|
import chalk from "chalk";
|
|
15
15
|
import t from "@babel/types";
|
|
16
16
|
import { runWithConcurrency } from "../../utility/concurrency.js";
|
|
17
|
+
import { progressLog } from "../../utility/progressLog.js";
|
|
17
18
|
const traverse = ((_a = _traverse.default) !== null && _a !== void 0 ? _a : _traverse);
|
|
18
19
|
/**
|
|
19
20
|
* Pure parser: given the text content of a JS file and the URL it was fetched
|
|
@@ -63,7 +64,12 @@ export const extractViteMapDepsChunks = (content, jsUrl) => {
|
|
|
63
64
|
// Explicit relative paths (./ or ../) → file-relative.
|
|
64
65
|
// Everything else → root-relative (origin).
|
|
65
66
|
const isFileRelative = val.startsWith("./") || val.startsWith("../");
|
|
66
|
-
|
|
67
|
+
try {
|
|
68
|
+
found.push(new URL(val, isFileRelative ? jsUrl : jsOrigin).href);
|
|
69
|
+
}
|
|
70
|
+
catch (_a) {
|
|
71
|
+
// Target-controlled manifests may contain malformed URL-like strings.
|
|
72
|
+
}
|
|
67
73
|
}
|
|
68
74
|
}
|
|
69
75
|
},
|
|
@@ -87,7 +93,7 @@ const vue_viteMapDeps = (jsFiles_1, ...args_1) => __awaiter(void 0, [jsFiles_1,
|
|
|
87
93
|
return;
|
|
88
94
|
const chunks = extractViteMapDepsChunks(content, jsUrl);
|
|
89
95
|
if (chunks.length > 0) {
|
|
90
|
-
|
|
96
|
+
progressLog(chalk.green(`[✓] Found ${chunks.length} chunks from __vite__mapDeps in ${jsUrl}`));
|
|
91
97
|
for (const u of chunks)
|
|
92
98
|
discovered.add(u);
|
|
93
99
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vue_viteMapDeps.js","sourceRoot":"","sources":["../../../src/lazyLoad/vue/vue_viteMapDeps.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,OAAO,WAAW,MAAM,0BAA0B,CAAC;AACnD,OAAO,MAAM,MAAM,eAAe,CAAC;AACnC,OAAO,SAAS,MAAM,iBAAiB,CAAC;AACxC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,CAAC,MAAM,cAAc,CAAC;AAC7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"vue_viteMapDeps.js","sourceRoot":"","sources":["../../../src/lazyLoad/vue/vue_viteMapDeps.ts"],"names":[],"mappings":"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"}
|
|
@@ -57,13 +57,17 @@ export const determineFeasibilityOutcome = (blockedWithoutProxy, blockedWithProx
|
|
|
57
57
|
*/
|
|
58
58
|
export const probeFeasibility = (resolved, url) => __awaiter(void 0, void 0, void 0, function* () {
|
|
59
59
|
console.log(chalk.cyan(`[i] Checking feasibility of the "${resolved.method}" proxy method with ${url}`));
|
|
60
|
-
const
|
|
61
|
-
const
|
|
60
|
+
const directResponse = yield fetch(url);
|
|
61
|
+
const directBody = yield directResponse.text();
|
|
62
|
+
const blockedWithoutProxy = yield checkFireWallBlocking(directBody, {
|
|
63
|
+
status: directResponse.status,
|
|
64
|
+
headers: directResponse.headers,
|
|
65
|
+
});
|
|
62
66
|
let blockedWithProxy = false;
|
|
63
67
|
if (blockedWithoutProxy) {
|
|
64
68
|
for (let i = 0; i < PROXY_CHECK_REQUESTS; i++) {
|
|
65
|
-
const body = yield proxyFeasibilityRequest(resolved, url);
|
|
66
|
-
if (yield checkFireWallBlocking(body)) {
|
|
69
|
+
const { body, status, headers } = yield proxyFeasibilityRequest(resolved, url);
|
|
70
|
+
if (yield checkFireWallBlocking(body, { status, headers })) {
|
|
67
71
|
blockedWithProxy = true;
|
|
68
72
|
break;
|
|
69
73
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkFeasibility.js","sourceRoot":"","sources":["../../src/proxy/checkFeasibility.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,qBAAqB,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAGvE,4GAA4G;AAC5G,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAOhC;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,CACvC,mBAA4B,EAC5B,gBAAyB,EACP,EAAE;IACpB,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACvB,OAAO;YACH,IAAI,EAAE,EAAE;YACR,OAAO,EAAE,kFAAkF;SAC9F,CAAC;IACN,CAAC;IACD,IAAI,gBAAgB,EAAE,CAAC;QACnB,OAAO;YACH,IAAI,EAAE,EAAE;YACR,OAAO,EAAE,2FAA2F;SACvG,CAAC;IACN,CAAC;IACD,OAAO;QACH,IAAI,EAAE,CAAC;QACP,OAAO,EACH,mHAAmH;KAC1H,CAAC;AACN,CAAC,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAO,QAA6B,EAAE,GAAW,EAA+B,EAAE;IAC9G,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oCAAoC,QAAQ,CAAC,MAAM,uBAAuB,GAAG,EAAE,CAAC,CAAC,CAAC;IACzG,MAAM,
|
|
1
|
+
{"version":3,"file":"checkFeasibility.js","sourceRoot":"","sources":["../../src/proxy/checkFeasibility.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,qBAAqB,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAGvE,4GAA4G;AAC5G,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAOhC;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,CACvC,mBAA4B,EAC5B,gBAAyB,EACP,EAAE;IACpB,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACvB,OAAO;YACH,IAAI,EAAE,EAAE;YACR,OAAO,EAAE,kFAAkF;SAC9F,CAAC;IACN,CAAC;IACD,IAAI,gBAAgB,EAAE,CAAC;QACnB,OAAO;YACH,IAAI,EAAE,EAAE;YACR,OAAO,EAAE,2FAA2F;SACvG,CAAC;IACN,CAAC;IACD,OAAO;QACH,IAAI,EAAE,CAAC;QACP,OAAO,EACH,mHAAmH;KAC1H,CAAC;AACN,CAAC,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAO,QAA6B,EAAE,GAAW,EAA+B,EAAE;IAC9G,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oCAAoC,QAAQ,CAAC,MAAM,uBAAuB,GAAG,EAAE,CAAC,CAAC,CAAC;IACzG,MAAM,cAAc,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IACxC,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,CAAC;IAC/C,MAAM,mBAAmB,GAAG,MAAM,qBAAqB,CAAC,UAAU,EAAE;QAChE,MAAM,EAAE,cAAc,CAAC,MAAM;QAC7B,OAAO,EAAE,cAAc,CAAC,OAAO;KAClC,CAAC,CAAC;IAEH,IAAI,gBAAgB,GAAG,KAAK,CAAC;IAC7B,IAAI,mBAAmB,EAAE,CAAC;QACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,oBAAoB,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,uBAAuB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;YAC/E,IAAI,MAAM,qBAAqB,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;gBACzD,gBAAgB,GAAG,IAAI,CAAC;gBACxB,MAAM;YACV,CAAC;QACL,CAAC;IACL,CAAC;IAED,OAAO,2BAA2B,CAAC,mBAAmB,EAAE,gBAAgB,CAAC,CAAC;AAC9E,CAAC,CAAA,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,gBAAgB,GAAG,CAAO,QAA6B,EAAE,GAAW,EAAiB,EAAE;IACzF,IAAI,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;QAChG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,8CAA8C,KAAK,EAAE,CAAC,CAAC,CAAC;IACpF,CAAC;AACL,CAAC,CAAA,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
|
|
@@ -8,26 +8,36 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
8
|
});
|
|
9
9
|
};
|
|
10
10
|
import chalk from "chalk";
|
|
11
|
+
import detectBlockedResponse from "./detectBlockedResponse.js";
|
|
12
|
+
/**
|
|
13
|
+
* Sentinel status used when the caller has no real HTTP status available. Outside the
|
|
14
|
+
* 400–599 range detectBlockedResponse's corroborated-status/generated-error paths require,
|
|
15
|
+
* so omitting status *skips* those paths instead of spoofing a match against the wrong
|
|
16
|
+
* denial-pattern set.
|
|
17
|
+
*/
|
|
18
|
+
const UNKNOWN_STATUS = 0;
|
|
11
19
|
/**
|
|
12
20
|
* Checks if a response body contains signs of firewall or security system blocking.
|
|
13
21
|
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
22
|
+
* Detects Cloudflare challenge pages from body content alone, and (when the caller can
|
|
23
|
+
* supply the real HTTP status and headers) corroborated 403/429/503 WAF/CDN denial pages.
|
|
16
24
|
*
|
|
17
25
|
* @param body - The response body content to analyze for blocking indicators
|
|
26
|
+
* @param context - The real HTTP status/headers, when available
|
|
18
27
|
* @returns Promise that resolves to true if blocking is detected, false otherwise
|
|
19
28
|
*/
|
|
20
|
-
const checkFireWallBlocking = (
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
return
|
|
29
|
-
|
|
30
|
-
|
|
29
|
+
const checkFireWallBlocking = (body_1, ...args_1) => __awaiter(void 0, [body_1, ...args_1], void 0, function* (body, context = {}) {
|
|
30
|
+
var _a;
|
|
31
|
+
const detection = detectBlockedResponse({
|
|
32
|
+
status: (_a = context.status) !== null && _a !== void 0 ? _a : UNKNOWN_STATUS,
|
|
33
|
+
headers: context.headers,
|
|
34
|
+
body,
|
|
35
|
+
});
|
|
36
|
+
if (!detection.blocked)
|
|
37
|
+
return false;
|
|
38
|
+
const provider = detection.provider === "cloudfront" ? "CloudFront" : "Cloudflare/CDN";
|
|
39
|
+
console.error(chalk.red(`[!] ${provider} detected`));
|
|
40
|
+
return true;
|
|
31
41
|
});
|
|
32
42
|
export default checkFireWallBlocking;
|
|
33
43
|
//# sourceMappingURL=checkFireWallBlocking.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkFireWallBlocking.js","sourceRoot":"","sources":["../../src/proxy/checkFireWallBlocking.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"checkFireWallBlocking.js","sourceRoot":"","sources":["../../src/proxy/checkFireWallBlocking.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,qBAAsD,MAAM,4BAA4B,CAAC;AAEhG;;;;;GAKG;AACH,MAAM,cAAc,GAAG,CAAC,CAAC;AAOzB;;;;;;;;;GASG;AACH,MAAM,qBAAqB,GAAG,oBAA2E,EAAE,2DAAtE,IAAY,EAAE,UAAgC,EAAE;;IACjF,MAAM,SAAS,GAAG,qBAAqB,CAAC;QACpC,MAAM,EAAE,MAAA,OAAO,CAAC,MAAM,mCAAI,cAAc;QACxC,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,IAAI;KACP,CAAC,CAAC;IACH,IAAI,CAAC,SAAS,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IACrC,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,gBAAgB,CAAC;IACvF,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,QAAQ,WAAW,CAAC,CAAC,CAAC;IACrD,OAAO,IAAI,CAAC;AAChB,CAAC,CAAA,CAAC;AAEF,eAAe,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
const NO_EVIDENCE = Object.freeze([]);
|
|
2
|
+
const NOT_BLOCKED = Object.freeze({
|
|
3
|
+
blocked: false,
|
|
4
|
+
provider: null,
|
|
5
|
+
reason: null,
|
|
6
|
+
evidence: NO_EVIDENCE,
|
|
7
|
+
});
|
|
8
|
+
const HTML_DOCUMENT_START = /^\uFEFF?\s*(?:<!doctype\s+html\b|<html\b|<head\b|<title\b)/i;
|
|
9
|
+
const JAVASCRIPT_CONTENT_TYPE = /(?:java|ecma)script/i;
|
|
10
|
+
const CLOUDFRONT_ERROR_BODY = /\berror:\s*the request could not be satisfied\b/i;
|
|
11
|
+
const CLOUDFRONT_GENERATOR = /\bgenerated by cloudfront\s*\(cloudfront\)/i;
|
|
12
|
+
const CDN_HEADER_RULES = Object.freeze([
|
|
13
|
+
Object.freeze({
|
|
14
|
+
name: "cf-ray",
|
|
15
|
+
provider: "cloudflare",
|
|
16
|
+
matches: (value) => value.trim().length > 0,
|
|
17
|
+
}),
|
|
18
|
+
Object.freeze({
|
|
19
|
+
name: "server",
|
|
20
|
+
provider: "cloudflare",
|
|
21
|
+
matches: (value) => /(?:^|\s|\()cloudflare(?:$|\s|\))/i.test(value),
|
|
22
|
+
}),
|
|
23
|
+
Object.freeze({
|
|
24
|
+
name: "x-amz-cf-id",
|
|
25
|
+
provider: "cloudfront",
|
|
26
|
+
matches: (value) => value.trim().length > 0,
|
|
27
|
+
}),
|
|
28
|
+
Object.freeze({
|
|
29
|
+
name: "server",
|
|
30
|
+
provider: "cloudfront",
|
|
31
|
+
matches: (value) => /\bcloudfront\b/i.test(value),
|
|
32
|
+
}),
|
|
33
|
+
Object.freeze({
|
|
34
|
+
name: "via",
|
|
35
|
+
provider: "cloudfront",
|
|
36
|
+
matches: (value) => /\bcloudfront\b/i.test(value),
|
|
37
|
+
}),
|
|
38
|
+
Object.freeze({
|
|
39
|
+
name: "x-cache",
|
|
40
|
+
provider: "cloudfront",
|
|
41
|
+
matches: (value) => /\bcloudfront\b/i.test(value),
|
|
42
|
+
}),
|
|
43
|
+
Object.freeze({
|
|
44
|
+
name: "server",
|
|
45
|
+
provider: "cdn",
|
|
46
|
+
matches: (value) => /^(?:akamaighost|fastly|varnish|sucuri\/cloudproxy)\b/i.test(value.trim()),
|
|
47
|
+
}),
|
|
48
|
+
Object.freeze({
|
|
49
|
+
name: "via",
|
|
50
|
+
provider: "cdn",
|
|
51
|
+
matches: (value) => /\b(?:akamai|fastly|varnish)\b/i.test(value),
|
|
52
|
+
}),
|
|
53
|
+
Object.freeze({
|
|
54
|
+
name: "x-served-by",
|
|
55
|
+
provider: "cdn",
|
|
56
|
+
matches: (value) => /(?:^|[\s,])cache-/i.test(value),
|
|
57
|
+
}),
|
|
58
|
+
Object.freeze({
|
|
59
|
+
name: "x-akamai-transformed",
|
|
60
|
+
provider: "cdn",
|
|
61
|
+
matches: (value) => value.trim().length > 0,
|
|
62
|
+
}),
|
|
63
|
+
Object.freeze({
|
|
64
|
+
name: "x-sucuri-id",
|
|
65
|
+
provider: "cdn",
|
|
66
|
+
matches: (value) => value.trim().length > 0,
|
|
67
|
+
}),
|
|
68
|
+
]);
|
|
69
|
+
const STATUS_DENIAL_PATTERNS = Object.freeze({
|
|
70
|
+
403: Object.freeze([
|
|
71
|
+
Object.freeze({ pattern: /\baccess\s+denied\b/i, label: "access denied" }),
|
|
72
|
+
Object.freeze({ pattern: /\brequest\s+(?:was\s+)?blocked\b/i, label: "request blocked" }),
|
|
73
|
+
]),
|
|
74
|
+
429: Object.freeze([
|
|
75
|
+
Object.freeze({ pattern: /\btoo many requests\b/i, label: "too many requests" }),
|
|
76
|
+
Object.freeze({ pattern: /\brate[ -]?limit(?:ed| exceeded)?\b/i, label: "rate limit" }),
|
|
77
|
+
]),
|
|
78
|
+
503: Object.freeze([
|
|
79
|
+
Object.freeze({ pattern: /\bservice unavailable\b/i, label: "service unavailable" }),
|
|
80
|
+
Object.freeze({ pattern: /\btemporarily unavailable\b/i, label: "temporarily unavailable" }),
|
|
81
|
+
Object.freeze({ pattern: /\bchecking your browser\b/i, label: "browser check" }),
|
|
82
|
+
]),
|
|
83
|
+
});
|
|
84
|
+
const normalizeHeaderValue = (value) => {
|
|
85
|
+
if (typeof value === "string")
|
|
86
|
+
return value;
|
|
87
|
+
if (Array.isArray(value))
|
|
88
|
+
return value.join(", ");
|
|
89
|
+
return null;
|
|
90
|
+
};
|
|
91
|
+
const normalizeHeaderEntries = (entries) => Object.freeze(entries.reduce((normalized, [name, rawValue]) => {
|
|
92
|
+
const value = normalizeHeaderValue(rawValue);
|
|
93
|
+
return value === null ? normalized : Object.assign(Object.assign({}, normalized), { [name.toLowerCase()]: value });
|
|
94
|
+
}, {}));
|
|
95
|
+
const normalizeHeaders = (headers) => {
|
|
96
|
+
if (!headers)
|
|
97
|
+
return Object.freeze({});
|
|
98
|
+
if (typeof Headers !== "undefined" && headers instanceof Headers) {
|
|
99
|
+
return normalizeHeaderEntries(Array.from(headers.entries()));
|
|
100
|
+
}
|
|
101
|
+
return normalizeHeaderEntries(Object.entries(headers));
|
|
102
|
+
};
|
|
103
|
+
const evidence = (source, signal, value, name) => Object.freeze(Object.assign(Object.assign({ source, signal }, (name ? { name } : {})), { value }));
|
|
104
|
+
const blockedResult = (provider, reason, items) => Object.freeze({
|
|
105
|
+
blocked: true,
|
|
106
|
+
provider,
|
|
107
|
+
reason,
|
|
108
|
+
evidence: Object.freeze([...items]),
|
|
109
|
+
});
|
|
110
|
+
const isHtmlDocument = (headers, body) => { var _a; return !JAVASCRIPT_CONTENT_TYPE.test((_a = headers["content-type"]) !== null && _a !== void 0 ? _a : "") && HTML_DOCUMENT_START.test(body); };
|
|
111
|
+
const normalizedTitle = (body) => {
|
|
112
|
+
const match = /<title(?:\s[^>]*)?>([\s\S]*?)<\/title\s*>/i.exec(body);
|
|
113
|
+
return match ? match[1].replace(/\s+/g, " ").trim() : null;
|
|
114
|
+
};
|
|
115
|
+
const cloudflareDocumentEvidence = (body) => {
|
|
116
|
+
const title = normalizedTitle(body);
|
|
117
|
+
const titleMatch = title && ["just a moment...", "attention required! | cloudflare"].includes(title.toLowerCase())
|
|
118
|
+
? evidence("title", "cloudflare-challenge-title", title)
|
|
119
|
+
: null;
|
|
120
|
+
const bodyMarker = /\/cdn-cgi\/challenge-platform\//i.test(body)
|
|
121
|
+
? "/cdn-cgi/challenge-platform/"
|
|
122
|
+
: /\/\?bm-verify=/i.test(body)
|
|
123
|
+
? "/?bm-verify="
|
|
124
|
+
: /\b(?:window\.)?_cf_chl_opt\b/i.test(body)
|
|
125
|
+
? "_cf_chl_opt"
|
|
126
|
+
: /\bchecking your browser\b/i.test(body) && /\bcloudflare\b/i.test(body)
|
|
127
|
+
? "Cloudflare browser check"
|
|
128
|
+
: null;
|
|
129
|
+
const bodyMatch = bodyMarker ? evidence("body", "cloudflare-challenge-body", bodyMarker) : null;
|
|
130
|
+
return Object.freeze([titleMatch, bodyMatch].filter((item) => item !== null));
|
|
131
|
+
};
|
|
132
|
+
const cdnHeaderMatches = (headers) => Object.freeze(CDN_HEADER_RULES.flatMap((rule) => {
|
|
133
|
+
const value = headers[rule.name];
|
|
134
|
+
return value && rule.matches(value)
|
|
135
|
+
? [Object.freeze({ provider: rule.provider, name: rule.name, value })]
|
|
136
|
+
: [];
|
|
137
|
+
}));
|
|
138
|
+
const providerFromHeaderMatches = (matches) => {
|
|
139
|
+
if (matches.some((match) => match.provider === "cloudflare"))
|
|
140
|
+
return "cloudflare";
|
|
141
|
+
if (matches.some((match) => match.provider === "cloudfront"))
|
|
142
|
+
return "cloudfront";
|
|
143
|
+
return "cdn";
|
|
144
|
+
};
|
|
145
|
+
const denialBodyMarker = (status, body) => {
|
|
146
|
+
var _a, _b, _c;
|
|
147
|
+
const patterns = (_a = STATUS_DENIAL_PATTERNS[status]) !== null && _a !== void 0 ? _a : [];
|
|
148
|
+
return (_c = (_b = patterns.find(({ pattern }) => pattern.test(body))) === null || _b === void 0 ? void 0 : _b.label) !== null && _c !== void 0 ? _c : null;
|
|
149
|
+
};
|
|
150
|
+
/**
|
|
151
|
+
* Detects strongly evidenced CDN/WAF block responses without I/O or logging.
|
|
152
|
+
*
|
|
153
|
+
* Generic 403/429/503 responses are only classified when status, a recognized CDN header,
|
|
154
|
+
* and a status-appropriate HTML denial body corroborate one another. Explicit Cloudflare
|
|
155
|
+
* challenge and CloudFront-generated-error signals can be decisive on their own.
|
|
156
|
+
*/
|
|
157
|
+
export const detectBlockedResponse = (input) => {
|
|
158
|
+
const headers = normalizeHeaders(input.headers);
|
|
159
|
+
const body = typeof input.body === "string" ? input.body : "";
|
|
160
|
+
const cfMitigated = headers["cf-mitigated"];
|
|
161
|
+
if (cfMitigated === null || cfMitigated === void 0 ? void 0 : cfMitigated.split(",").some((value) => value.trim().toLowerCase() === "challenge")) {
|
|
162
|
+
return blockedResult("cloudflare", "explicit-challenge", [
|
|
163
|
+
evidence("header", "cloudflare-challenge-header", cfMitigated, "cf-mitigated"),
|
|
164
|
+
]);
|
|
165
|
+
}
|
|
166
|
+
const htmlDocument = isHtmlDocument(headers, body);
|
|
167
|
+
if (htmlDocument) {
|
|
168
|
+
const cloudflareEvidence = cloudflareDocumentEvidence(body);
|
|
169
|
+
if (cloudflareEvidence.length > 0) {
|
|
170
|
+
return blockedResult("cloudflare", "explicit-challenge", cloudflareEvidence);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
const errorStatus = Number.isInteger(input.status) && input.status >= 400 && input.status <= 599 && input.status !== 404;
|
|
174
|
+
const cloudfrontErrorHeader = headers["x-cache"];
|
|
175
|
+
if (errorStatus && cloudfrontErrorHeader && /\berror from cloudfront\b/i.test(cloudfrontErrorHeader)) {
|
|
176
|
+
const requestId = headers["x-amz-cf-id"];
|
|
177
|
+
return blockedResult("cloudfront", "generated-error", [
|
|
178
|
+
evidence("status", "error-http-status", input.status),
|
|
179
|
+
evidence("header", "cloudfront-generated-error-header", cloudfrontErrorHeader, "x-cache"),
|
|
180
|
+
...(requestId ? [evidence("header", "cloudfront-request-id-header", requestId, "x-amz-cf-id")] : []),
|
|
181
|
+
]);
|
|
182
|
+
}
|
|
183
|
+
if (errorStatus && htmlDocument && CLOUDFRONT_ERROR_BODY.test(body) && CLOUDFRONT_GENERATOR.test(body)) {
|
|
184
|
+
return blockedResult("cloudfront", "generated-error", [
|
|
185
|
+
evidence("status", "error-http-status", input.status),
|
|
186
|
+
evidence("body", "cloudfront-generated-error-body", "Generated by cloudfront (CloudFront)"),
|
|
187
|
+
]);
|
|
188
|
+
}
|
|
189
|
+
const denialMarker = htmlDocument ? denialBodyMarker(input.status, body) : null;
|
|
190
|
+
if (denialMarker) {
|
|
191
|
+
const headerMatches = cdnHeaderMatches(headers);
|
|
192
|
+
if (headerMatches.length > 0) {
|
|
193
|
+
return blockedResult(providerFromHeaderMatches(headerMatches), "corroborated-status", [
|
|
194
|
+
evidence("status", "blocked-http-status", input.status),
|
|
195
|
+
...headerMatches.map((match) => evidence("header", "cdn-response-header", match.value, match.name)),
|
|
196
|
+
evidence("body", "status-matched-denial-body", denialMarker),
|
|
197
|
+
]);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
return NOT_BLOCKED;
|
|
201
|
+
};
|
|
202
|
+
export default detectBlockedResponse;
|
|
203
|
+
//# sourceMappingURL=detectBlockedResponse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detectBlockedResponse.js","sourceRoot":"","sources":["../../src/proxy/detectBlockedResponse.ts"],"names":[],"mappings":"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"}
|