fpscanner 0.2.0 → 0.9.2
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/README.md +639 -55
- package/bin/cli.js +216 -0
- package/dist/crypto-helpers.d.ts +19 -0
- package/dist/crypto-helpers.d.ts.map +1 -0
- package/dist/detections/hasCDP.d.ts +3 -0
- package/dist/detections/hasCDP.d.ts.map +1 -0
- package/dist/detections/hasContextMismatch.d.ts +3 -0
- package/dist/detections/hasContextMismatch.d.ts.map +1 -0
- package/dist/detections/hasHeadlessChromeScreenResolution.d.ts +3 -0
- package/dist/detections/hasHeadlessChromeScreenResolution.d.ts.map +1 -0
- package/dist/detections/hasHighCPUCount.d.ts +3 -0
- package/dist/detections/hasHighCPUCount.d.ts.map +1 -0
- package/dist/detections/hasImpossibleDeviceMemory.d.ts +3 -0
- package/dist/detections/hasImpossibleDeviceMemory.d.ts.map +1 -0
- package/dist/detections/hasMismatchPlatformIframe.d.ts +3 -0
- package/dist/detections/hasMismatchPlatformIframe.d.ts.map +1 -0
- package/dist/detections/hasMismatchPlatformWorker.d.ts +3 -0
- package/dist/detections/hasMismatchPlatformWorker.d.ts.map +1 -0
- package/dist/detections/hasMismatchWebGLInWorker.d.ts +3 -0
- package/dist/detections/hasMismatchWebGLInWorker.d.ts.map +1 -0
- package/dist/detections/hasMissingChromeObject.d.ts +3 -0
- package/dist/detections/hasMissingChromeObject.d.ts.map +1 -0
- package/dist/detections/hasPlaywright.d.ts +3 -0
- package/dist/detections/hasPlaywright.d.ts.map +1 -0
- package/dist/detections/hasSeleniumProperty.d.ts +3 -0
- package/dist/detections/hasSeleniumProperty.d.ts.map +1 -0
- package/dist/detections/hasSwiftshaderRenderer.d.ts +3 -0
- package/dist/detections/hasSwiftshaderRenderer.d.ts.map +1 -0
- package/dist/detections/hasUTCTimezone.d.ts +3 -0
- package/dist/detections/hasUTCTimezone.d.ts.map +1 -0
- package/dist/detections/hasWebdriver.d.ts +3 -0
- package/dist/detections/hasWebdriver.d.ts.map +1 -0
- package/dist/detections/hasWebdriverIframe.d.ts +3 -0
- package/dist/detections/hasWebdriverIframe.d.ts.map +1 -0
- package/dist/detections/hasWebdriverWorker.d.ts +3 -0
- package/dist/detections/hasWebdriverWorker.d.ts.map +1 -0
- package/dist/detections/hasWebdriverWritable.d.ts +3 -0
- package/dist/detections/hasWebdriverWritable.d.ts.map +1 -0
- package/dist/fpScanner.cjs.js +31 -0
- package/dist/fpScanner.es.js +1066 -0
- package/dist/index.d.ts +39 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/signals/browserExtensions.d.ts +5 -0
- package/dist/signals/browserExtensions.d.ts.map +1 -0
- package/dist/signals/browserFeatures.d.ts +14 -0
- package/dist/signals/browserFeatures.d.ts.map +1 -0
- package/dist/signals/canvas.d.ts +6 -0
- package/dist/signals/canvas.d.ts.map +1 -0
- package/dist/signals/cdp.d.ts +2 -0
- package/dist/signals/cdp.d.ts.map +1 -0
- package/dist/signals/cpuCount.d.ts +2 -0
- package/dist/signals/cpuCount.d.ts.map +1 -0
- package/dist/signals/etsl.d.ts +2 -0
- package/dist/signals/etsl.d.ts.map +1 -0
- package/dist/signals/highEntropyValues.d.ts +11 -0
- package/dist/signals/highEntropyValues.d.ts.map +1 -0
- package/dist/signals/iframe.d.ts +9 -0
- package/dist/signals/iframe.d.ts.map +1 -0
- package/dist/signals/internationalization.d.ts +5 -0
- package/dist/signals/internationalization.d.ts.map +1 -0
- package/dist/signals/languages.d.ts +5 -0
- package/dist/signals/languages.d.ts.map +1 -0
- package/dist/signals/maths.d.ts +2 -0
- package/dist/signals/maths.d.ts.map +1 -0
- package/dist/signals/mediaCodecs.d.ts +11 -0
- package/dist/signals/mediaCodecs.d.ts.map +1 -0
- package/dist/signals/mediaQueries.d.ts +13 -0
- package/dist/signals/mediaQueries.d.ts.map +1 -0
- package/dist/signals/memory.d.ts +2 -0
- package/dist/signals/memory.d.ts.map +1 -0
- package/dist/signals/multimediaDevices.d.ts +2 -0
- package/dist/signals/multimediaDevices.d.ts.map +1 -0
- package/dist/signals/navigatorPropertyDescriptors.d.ts +2 -0
- package/dist/signals/navigatorPropertyDescriptors.d.ts.map +1 -0
- package/dist/signals/nonce.d.ts +2 -0
- package/dist/signals/nonce.d.ts.map +1 -0
- package/dist/signals/platform.d.ts +2 -0
- package/dist/signals/platform.d.ts.map +1 -0
- package/dist/signals/playwright.d.ts +2 -0
- package/dist/signals/playwright.d.ts.map +1 -0
- package/dist/signals/plugins.d.ts +9 -0
- package/dist/signals/plugins.d.ts.map +1 -0
- package/dist/signals/screenResolution.d.ts +12 -0
- package/dist/signals/screenResolution.d.ts.map +1 -0
- package/dist/signals/seleniumProperties.d.ts +2 -0
- package/dist/signals/seleniumProperties.d.ts.map +1 -0
- package/dist/signals/time.d.ts +2 -0
- package/dist/signals/time.d.ts.map +1 -0
- package/dist/signals/toSourceError.d.ts +5 -0
- package/dist/signals/toSourceError.d.ts.map +1 -0
- package/dist/signals/url.d.ts +2 -0
- package/dist/signals/url.d.ts.map +1 -0
- package/dist/signals/userAgent.d.ts +2 -0
- package/dist/signals/userAgent.d.ts.map +1 -0
- package/dist/signals/utils.d.ts +11 -0
- package/dist/signals/utils.d.ts.map +1 -0
- package/dist/signals/webGL.d.ts +5 -0
- package/dist/signals/webGL.d.ts.map +1 -0
- package/dist/signals/webdriver.d.ts +2 -0
- package/dist/signals/webdriver.d.ts.map +1 -0
- package/dist/signals/webdriverWritable.d.ts +2 -0
- package/dist/signals/webdriverWritable.d.ts.map +1 -0
- package/dist/signals/webgpu.d.ts +7 -0
- package/dist/signals/webgpu.d.ts.map +1 -0
- package/dist/signals/worker.d.ts +2 -0
- package/dist/signals/worker.d.ts.map +1 -0
- package/dist/types.d.ts +207 -0
- package/dist/types.d.ts.map +1 -0
- package/package.json +58 -15
- package/scripts/build-custom.js +246 -0
- package/src/crypto-helpers.ts +50 -0
- package/src/detections/hasCDP.ts +5 -0
- package/src/detections/hasContextMismatch.ts +19 -0
- package/src/detections/hasHeadlessChromeScreenResolution.ts +10 -0
- package/src/detections/hasHighCPUCount.ts +9 -0
- package/src/detections/hasImpossibleDeviceMemory.ts +9 -0
- package/src/detections/hasMismatchPlatformIframe.ts +10 -0
- package/src/detections/hasMismatchPlatformWorker.ts +10 -0
- package/src/detections/hasMismatchWebGLInWorker.ts +13 -0
- package/src/detections/hasMissingChromeObject.ts +6 -0
- package/src/detections/hasPlaywright.ts +5 -0
- package/src/detections/hasSeleniumProperty.ts +5 -0
- package/src/detections/hasSwiftshaderRenderer.ts +5 -0
- package/src/detections/hasUTCTimezone.ts +5 -0
- package/src/detections/hasWebdriver.ts +5 -0
- package/src/detections/hasWebdriverIframe.ts +5 -0
- package/src/detections/hasWebdriverWorker.ts +5 -0
- package/src/detections/hasWebdriverWritable.ts +5 -0
- package/src/globals.d.ts +10 -0
- package/src/index.ts +644 -0
- package/src/signals/browserExtensions.ts +57 -0
- package/src/signals/browserFeatures.ts +24 -0
- package/src/signals/canvas.ts +84 -0
- package/src/signals/cdp.ts +18 -0
- package/src/signals/cpuCount.ts +5 -0
- package/src/signals/etsl.ts +3 -0
- package/src/signals/highEntropyValues.ts +48 -0
- package/src/signals/iframe.ts +34 -0
- package/src/signals/internationalization.ts +24 -0
- package/src/signals/languages.ts +6 -0
- package/src/signals/maths.ts +30 -0
- package/src/signals/mediaCodecs.ts +120 -0
- package/src/signals/mediaQueries.ts +85 -0
- package/src/signals/memory.ts +5 -0
- package/src/signals/multimediaDevices.ts +34 -0
- package/src/signals/navigatorPropertyDescriptors.ts +17 -0
- package/src/signals/nonce.ts +3 -0
- package/src/signals/platform.ts +3 -0
- package/src/signals/playwright.ts +3 -0
- package/src/signals/plugins.ts +70 -0
- package/src/signals/screenResolution.ts +15 -0
- package/src/signals/seleniumProperties.ts +40 -0
- package/src/signals/time.ts +3 -0
- package/src/signals/toSourceError.ts +27 -0
- package/src/signals/url.ts +3 -0
- package/src/signals/userAgent.ts +3 -0
- package/src/signals/utils.ts +29 -0
- package/src/signals/webGL.ts +28 -0
- package/src/signals/webdriver.ts +3 -0
- package/src/signals/webdriverWritable.ts +15 -0
- package/src/signals/webgpu.ts +28 -0
- package/src/signals/worker.ts +77 -0
- package/src/types.ts +237 -0
- package/.babelrc +0 -3
- package/.travis.yml +0 -17
- package/src/fpScanner.js +0 -222
- package/test/test.html +0 -11
- package/test/test.js +0 -116
package/src/fpScanner.js
DELETED
|
@@ -1,222 +0,0 @@
|
|
|
1
|
-
const parser = require('ua-parser-js');
|
|
2
|
-
|
|
3
|
-
const fpscanner = (function () {
|
|
4
|
-
const TESTS = {
|
|
5
|
-
PHANTOM_UA: 'PHANTOM_UA',
|
|
6
|
-
PHANTOM_PROPERTIES: 'PHANTOM_PROPERTIES',
|
|
7
|
-
PHANTOM_ETSL: 'PHANTOM_ETSL',
|
|
8
|
-
PHANTOM_LANGUAGE: 'PHANTOM_LANGUAGE',
|
|
9
|
-
PHANTOM_WEBSOCKET: 'PHANTOM_WEBSOCKET',
|
|
10
|
-
MQ_SCREEN: 'MQ_SCREEN',
|
|
11
|
-
PHANTOM_OVERFLOW: 'PHANTOM_OVERFLOW',
|
|
12
|
-
PHANTOM_WINDOW_HEIGHT: 'PHANTOM_WINDOW_HEIGHT',
|
|
13
|
-
HEADCHR_UA: 'HEADCHR_UA',
|
|
14
|
-
WEBDRIVER: 'WEBDRIVER',
|
|
15
|
-
HEADCHR_CHROME_OBJ: 'HEADCHR_CHROME_OBJ',
|
|
16
|
-
HEADCHR_PERMISSIONS: 'HEADCHR_PERMISSIONS',
|
|
17
|
-
HEADCHR_PLUGINS: 'HEADCHR_PLUGINS',
|
|
18
|
-
HEADCHR_IFRAME: 'HEADCHR_IFRAME',
|
|
19
|
-
CHR_DEBUG_TOOLS: 'CHR_DEBUG_TOOLS',
|
|
20
|
-
SELENIUM_DRIVER: 'SELENIUM_DRIVER',
|
|
21
|
-
CHR_BATTERY: 'CHR_BATTERY',
|
|
22
|
-
CHR_MEMORY: 'CHR_MEMORY',
|
|
23
|
-
TRANSPARENT_PIXEL: 'TRANSPARENT_PIXEL',
|
|
24
|
-
SEQUENTUM: 'SEQUENTUM',
|
|
25
|
-
VIDEO_CODECS: 'VIDEO_CODECS'
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
const VENDORS = {
|
|
29
|
-
ONEPLUS: 'OnePlus'
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
const BROWSERS = {
|
|
33
|
-
CHROME: 'Chrome',
|
|
34
|
-
CHROMIUM: 'Chromium',
|
|
35
|
-
OPERA: 'Opera'
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
// TODO adds test for memoryDevices > 8 except for 'ONEPLUS'
|
|
39
|
-
|
|
40
|
-
const INCONSISTENT = 1;
|
|
41
|
-
const UNSURE = 2;
|
|
42
|
-
const CONSISTENT = 3;
|
|
43
|
-
|
|
44
|
-
const analysisResult = (name, consistent, data) => {
|
|
45
|
-
return {name: name, consistent: consistent, data: data};
|
|
46
|
-
};
|
|
47
|
-
|
|
48
|
-
const analyseFingerprint = (fingerprint) => {
|
|
49
|
-
const detectionTests = {};
|
|
50
|
-
|
|
51
|
-
const uaParsed = parser(fingerprint.userAgent);
|
|
52
|
-
const OS_REF = uaParsed.os.name;
|
|
53
|
-
const OS_VERSION_REF = uaParsed.os.version;
|
|
54
|
-
const BROWSER_REF = uaParsed.browser.name;
|
|
55
|
-
const BROWSER_VERSION_REF = uaParsed.browser.major;
|
|
56
|
-
const IS_MOBILE_REF = uaParsed.device.type === parser.DEVICE.MOBILE;
|
|
57
|
-
const VENDOR_REF = uaParsed.device.vendor;
|
|
58
|
-
|
|
59
|
-
const addTestResult = (fn) => {
|
|
60
|
-
let result = fn(fingerprint);
|
|
61
|
-
detectionTests[result.name] = result;
|
|
62
|
-
};
|
|
63
|
-
|
|
64
|
-
// Add tests below:
|
|
65
|
-
addTestResult(() => {
|
|
66
|
-
const testResult = /PhantomJS/.test(fingerprint.userAgent) ? INCONSISTENT : CONSISTENT;
|
|
67
|
-
return analysisResult(TESTS.PHANTOM_UA, testResult, {userAgent: fingerprint.userAgent});
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
addTestResult(() => {
|
|
71
|
-
const testResult = fingerprint.phantomJS.some((val) => {
|
|
72
|
-
return val;
|
|
73
|
-
}) ? INCONSISTENT : CONSISTENT;
|
|
74
|
-
return analysisResult(TESTS.PHANTOM_PROPERTIES, testResult, {attributesFound: fingerprint.phantomJS});
|
|
75
|
-
});
|
|
76
|
-
|
|
77
|
-
addTestResult(() => {
|
|
78
|
-
let testResult = !/Firefox|AppleWebkit/.test(fingerprint.userAgent) &&
|
|
79
|
-
fingerprint.etsl === 37 ? INCONSISTENT : CONSISTENT;
|
|
80
|
-
return analysisResult(TESTS.PHANTOM_ETSL, testResult, {etsl: fingerprint.etsl});
|
|
81
|
-
});
|
|
82
|
-
|
|
83
|
-
addTestResult(() => {
|
|
84
|
-
let testResult = !/Trident|MSIE|Edge/.test(fingerprint.userAgent) &&
|
|
85
|
-
fingerprint.languages === undefined ? INCONSISTENT : CONSISTENT;
|
|
86
|
-
return analysisResult(TESTS.PHANTOM_LANGUAGE, testResult, {languages: fingerprint.languages});
|
|
87
|
-
});
|
|
88
|
-
|
|
89
|
-
addTestResult(() => {
|
|
90
|
-
let testResult = /SyntaxError: DOM Exception 12/.test(fingerprint.errorsGenerated[7]) ? INCONSISTENT : CONSISTENT;
|
|
91
|
-
return analysisResult(TESTS.PHANTOM_WEBSOCKET, testResult, {error: fingerprint.errorsGenerated[7]});
|
|
92
|
-
});
|
|
93
|
-
|
|
94
|
-
addTestResult(() => {
|
|
95
|
-
let testResult = fingerprint.screenMediaQuery ? INCONSISTENT : CONSISTENT;
|
|
96
|
-
return analysisResult(TESTS.MQ_SCREEN, testResult, {});
|
|
97
|
-
});
|
|
98
|
-
|
|
99
|
-
addTestResult(() => {
|
|
100
|
-
let testResult = fingerprint.resOverflow.errorName === 'RangeError' &&
|
|
101
|
-
fingerprint.resOverflow.errorMessage === 'Maximum call stack size exceeded.' &&
|
|
102
|
-
fingerprint.resOverflow.errorStacklength > 20*fingerprint.resOverflow.depth? INCONSISTENT : CONSISTENT;
|
|
103
|
-
return analysisResult(TESTS.PHANTOM_OVERFLOW, testResult, fingerprint.resOverflow)
|
|
104
|
-
});
|
|
105
|
-
|
|
106
|
-
addTestResult(() => {
|
|
107
|
-
let testResult = fingerprint.screen.wOuterHeight < fingerprint.screen.wInnerHeight ? INCONSISTENT : CONSISTENT;
|
|
108
|
-
return analysisResult(TESTS.PHANTOM_WINDOW_HEIGHT, testResult, fingerprint.screen);
|
|
109
|
-
});
|
|
110
|
-
|
|
111
|
-
addTestResult(() => {
|
|
112
|
-
let testResult = /HeadlessChrome/.test(fingerprint.userAgent) ? INCONSISTENT : CONSISTENT;
|
|
113
|
-
return analysisResult(TESTS.HEADCHR_UA, testResult, {userAgent: fingerprint.userAgent});
|
|
114
|
-
});
|
|
115
|
-
|
|
116
|
-
addTestResult(() => {
|
|
117
|
-
let testResult = fingerprint.webDriver ? INCONSISTENT : CONSISTENT;
|
|
118
|
-
return analysisResult(TESTS.WEBDRIVER, testResult, {});
|
|
119
|
-
});
|
|
120
|
-
|
|
121
|
-
addTestResult(() => {
|
|
122
|
-
let testResult = !fingerprint.hasChrome && /Chrome/.test(fingerprint.userAgent) ? INCONSISTENT : CONSISTENT;
|
|
123
|
-
return analysisResult(TESTS.HEADCHR_CHROME_OBJ, testResult, {});
|
|
124
|
-
});
|
|
125
|
-
|
|
126
|
-
addTestResult(() => {
|
|
127
|
-
let testResult = fingerprint.permissions.permission === 'denied' &&
|
|
128
|
-
fingerprint.permissions.state === 'prompt' ? INCONSISTENT : CONSISTENT;
|
|
129
|
-
return analysisResult(TESTS.HEADCHR_PERMISSIONS, testResult, {});
|
|
130
|
-
});
|
|
131
|
-
|
|
132
|
-
addTestResult(() => {
|
|
133
|
-
let testResult = /Chrome/.test(fingerprint.userAgent) &&
|
|
134
|
-
fingerprint.plugins.length === 0 ? UNSURE : CONSISTENT;
|
|
135
|
-
return analysisResult(TESTS.HEADCHR_PLUGINS, testResult, {plugins: fingerprint.plugins});
|
|
136
|
-
});
|
|
137
|
-
|
|
138
|
-
addTestResult(() => {
|
|
139
|
-
let testResult = /Chrome/.test(fingerprint.userAgent) &&
|
|
140
|
-
fingerprint.iframeChrome === 'undefined' ? INCONSISTENT : CONSISTENT;
|
|
141
|
-
return analysisResult(TESTS.HEADCHR_IFRAME, testResult, {});
|
|
142
|
-
});
|
|
143
|
-
|
|
144
|
-
addTestResult(() => {
|
|
145
|
-
let testResult = /Chrome/.test(fingerprint.userAgent) &&
|
|
146
|
-
fingerprint.debugTool ? UNSURE : CONSISTENT;
|
|
147
|
-
return analysisResult(TESTS.CHR_DEBUG_TOOLS, testResult, {});
|
|
148
|
-
});
|
|
149
|
-
|
|
150
|
-
addTestResult(() => {
|
|
151
|
-
const testResult = fingerprint.selenium.some((val) => {
|
|
152
|
-
return val;
|
|
153
|
-
}) ? INCONSISTENT : CONSISTENT;
|
|
154
|
-
return analysisResult(TESTS.SELENIUM_DRIVER, testResult, {attributesFound: fingerprint.selenium});
|
|
155
|
-
});
|
|
156
|
-
|
|
157
|
-
addTestResult(() => {
|
|
158
|
-
let testResult = /Chrome/.test(fingerprint.userAgent) &&
|
|
159
|
-
BROWSER_VERSION_REF > 49 && !fingerprint.battery ? INCONSISTENT : CONSISTENT;
|
|
160
|
-
return analysisResult(TESTS.CHR_BATTERY, testResult, {});
|
|
161
|
-
});
|
|
162
|
-
|
|
163
|
-
addTestResult(() => {
|
|
164
|
-
let testResult = CONSISTENT;
|
|
165
|
-
|
|
166
|
-
if (IS_MOBILE_REF && fingerprint.deviceMemory >= 8 &&
|
|
167
|
-
VENDOR_REF !== VENDORS.ONEPLUS) {
|
|
168
|
-
// Currently only onePlus has more than 8gb of RAM
|
|
169
|
-
testResult = INCONSISTENT;
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
if (fingerprint.deviceMemory !== 0 &&
|
|
173
|
-
!(BROWSER_REF === BROWSERS.CHROME && BROWSER_VERSION_REF >= 63) &&
|
|
174
|
-
!(BROWSER_REF === BROWSERS.OPERA && BROWSER_VERSION_REF >= 50)) {
|
|
175
|
-
// If deviceMemory != 0 and not recent Chrome or Opera
|
|
176
|
-
testResult = INCONSISTENT;
|
|
177
|
-
} else if (fingerprint.deviceMemory === 0 &&
|
|
178
|
-
(BROWSER_REF === BROWSERS.CHROME && BROWSER_VERSION_REF >= 63) ||
|
|
179
|
-
(BROWSER_REF === BROWSERS.OPERA && BROWSER_VERSION_REF >= 50)) {
|
|
180
|
-
// If deviceMemory = 0 and recent Chrome or Opera
|
|
181
|
-
testResult = INCONSISTENT;
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
return analysisResult(TESTS.CHR_MEMORY, testResult, {});
|
|
185
|
-
});
|
|
186
|
-
|
|
187
|
-
addTestResult(() => {
|
|
188
|
-
let testResult = fingerprint.tpCanvas !== 'error' &&
|
|
189
|
-
fingerprint.tpCanvas[0] === 0 &&
|
|
190
|
-
fingerprint.tpCanvas[1] === 0 &&
|
|
191
|
-
fingerprint.tpCanvas[2] === 0 &&
|
|
192
|
-
fingerprint.tpCanvas[3] === 0 ? CONSISTENT : UNSURE;
|
|
193
|
-
return analysisResult(TESTS.TRANSPARENT_PIXEL, testResult, fingerprint.tpCanvas);
|
|
194
|
-
});
|
|
195
|
-
|
|
196
|
-
addTestResult(() => {
|
|
197
|
-
let testResult = fingerprint.sequentum ? INCONSISTENT : CONSISTENT;
|
|
198
|
-
return analysisResult(TESTS.SEQUENTUM, testResult, {});
|
|
199
|
-
});
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
// TODO: do more tests on Windows and Mac OS to change UNSURE to INCONSISTENT
|
|
203
|
-
addTestResult(() => {
|
|
204
|
-
let testResult = (BROWSER_REF === BROWSERS.CHROME || BROWSER_REF === BROWSERS.CHROMIUM) &&
|
|
205
|
-
fingerprint.videoCodecs.h264 !== 'probably' ? UNSURE : CONSISTENT;
|
|
206
|
-
return analysisResult(TESTS.VIDEO_CODECS, testResult, {h264: fingerprint.videoCodecs.h264});
|
|
207
|
-
});
|
|
208
|
-
|
|
209
|
-
return detectionTests;
|
|
210
|
-
};
|
|
211
|
-
|
|
212
|
-
return {
|
|
213
|
-
analyseFingerprint: analyseFingerprint,
|
|
214
|
-
CONSISTENT: CONSISTENT,
|
|
215
|
-
UNSURE: UNSURE,
|
|
216
|
-
INCONSISTENT: INCONSISTENT,
|
|
217
|
-
TESTS: TESTS
|
|
218
|
-
}
|
|
219
|
-
})();
|
|
220
|
-
|
|
221
|
-
module.exports = fpscanner;
|
|
222
|
-
|
package/test/test.html
DELETED
package/test/test.js
DELETED
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
const {expect} = require('chai');
|
|
2
|
-
const puppeteer = require('puppeteer');
|
|
3
|
-
const path = require('path');
|
|
4
|
-
const scanner = require('../src/fpScanner');
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
describe('Bot scanner', async function () {
|
|
8
|
-
let browser;
|
|
9
|
-
let page;
|
|
10
|
-
let scannerResult;
|
|
11
|
-
|
|
12
|
-
before(async function () {
|
|
13
|
-
browser = await puppeteer.launch();
|
|
14
|
-
page = await browser.newPage();
|
|
15
|
-
await page.goto('file://' + path.resolve(__dirname, 'test.html'), {
|
|
16
|
-
waitUntil: 'load'
|
|
17
|
-
});
|
|
18
|
-
const fingerprint = await page.evaluate(async () => {
|
|
19
|
-
return await fpCollect.generateFingerprint();
|
|
20
|
-
});
|
|
21
|
-
|
|
22
|
-
scannerResult = scanner.analyseFingerprint(fingerprint);
|
|
23
|
-
});
|
|
24
|
-
|
|
25
|
-
after(async function () {
|
|
26
|
-
await browser.close();
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
it('PHANTOM_UA should be consistent', async () => {
|
|
30
|
-
expect(scannerResult[scanner.TESTS.PHANTOM_UA].consistent).to.equal(scanner.CONSISTENT);
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
it('PHANTOM_PROPERTIES should be consistent', async () => {
|
|
34
|
-
expect(scannerResult[scanner.TESTS.PHANTOM_PROPERTIES].consistent).to.equal(scanner.CONSISTENT);
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
it('PHANTOM_ETSL should be consistent', async () => {
|
|
38
|
-
expect(scannerResult[scanner.TESTS.PHANTOM_ETSL].consistent).to.equal(scanner.CONSISTENT);
|
|
39
|
-
});
|
|
40
|
-
|
|
41
|
-
it('PHANTOM_LANGUAGE should be consistent', async () => {
|
|
42
|
-
expect(scannerResult[scanner.TESTS.PHANTOM_LANGUAGE].consistent).to.equal(scanner.CONSISTENT);
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
it('PHANTOM_WEBSOCKET should be consistent', async () => {
|
|
46
|
-
expect(scannerResult[scanner.TESTS.PHANTOM_WEBSOCKET].consistent).to.equal(scanner.CONSISTENT);
|
|
47
|
-
});
|
|
48
|
-
|
|
49
|
-
it('MQ_SCREEN should not be consistent', async () => {
|
|
50
|
-
expect(scannerResult[scanner.TESTS.MQ_SCREEN].consistent).to.equal(scanner.INCONSISTENT);
|
|
51
|
-
});
|
|
52
|
-
|
|
53
|
-
it('PHANTOM_OVERFLOW should not be consistent', async () => {
|
|
54
|
-
expect(scannerResult[scanner.TESTS.PHANTOM_OVERFLOW].consistent).to.equal(scanner.CONSISTENT);
|
|
55
|
-
});
|
|
56
|
-
|
|
57
|
-
it('PHANTOM_WINDOW_HEIGHT should not be consistent', async () => {
|
|
58
|
-
expect(scannerResult[scanner.TESTS.PHANTOM_WINDOW_HEIGHT].consistent).to.equal(scanner.CONSISTENT);
|
|
59
|
-
});
|
|
60
|
-
|
|
61
|
-
it('HEADCHR_UA should not be consistent', async () => {
|
|
62
|
-
expect(scannerResult[scanner.TESTS.HEADCHR_UA].consistent).to.equal(scanner.INCONSISTENT);
|
|
63
|
-
});
|
|
64
|
-
|
|
65
|
-
it('WEBDRIVER should not be consistent', async () => {
|
|
66
|
-
expect(scannerResult[scanner.TESTS.WEBDRIVER].consistent).to.equal(scanner.INCONSISTENT);
|
|
67
|
-
});
|
|
68
|
-
|
|
69
|
-
it('HEADCHR_CHROME_OBJ should not be consistent', async () => {
|
|
70
|
-
expect(scannerResult[scanner.TESTS.HEADCHR_CHROME_OBJ].consistent).to.equal(scanner.INCONSISTENT);
|
|
71
|
-
});
|
|
72
|
-
|
|
73
|
-
it('HEADCHR_PERMISSIONS should not be consistent', async () => {
|
|
74
|
-
expect(scannerResult[scanner.TESTS.HEADCHR_PERMISSIONS].consistent).to.equal(scanner.INCONSISTENT);
|
|
75
|
-
});
|
|
76
|
-
|
|
77
|
-
it('HEADCHR_PLUGINS should be unsure', async () => {
|
|
78
|
-
expect(scannerResult[scanner.TESTS.HEADCHR_PLUGINS].consistent).to.equal(scanner.UNSURE);
|
|
79
|
-
});
|
|
80
|
-
|
|
81
|
-
it('HEADCHR_IFRAME should be inconsistent', async () => {
|
|
82
|
-
expect(scannerResult[scanner.TESTS.HEADCHR_IFRAME].consistent).to.equal(scanner.INCONSISTENT);
|
|
83
|
-
});
|
|
84
|
-
|
|
85
|
-
it('CHR_DEBUG_TOOLS should be unsure', async () => {
|
|
86
|
-
expect(scannerResult[scanner.TESTS.CHR_DEBUG_TOOLS].consistent).to.equal(scanner.UNSURE);
|
|
87
|
-
});
|
|
88
|
-
|
|
89
|
-
it('SELENIUM_DRIVER should be consistent', async () => {
|
|
90
|
-
expect(scannerResult[scanner.TESTS.SELENIUM_DRIVER].consistent).to.equal(scanner.CONSISTENT);
|
|
91
|
-
});
|
|
92
|
-
|
|
93
|
-
it('CHR_BATTERY should be consistent', async () => {
|
|
94
|
-
expect(scannerResult[scanner.TESTS.CHR_BATTERY].consistent).to.equal(scanner.CONSISTENT);
|
|
95
|
-
});
|
|
96
|
-
|
|
97
|
-
it('CHR_MEMORY should be inconsistent', async () => {
|
|
98
|
-
expect(scannerResult[scanner.TESTS.CHR_MEMORY].consistent).to.equal(scanner.INCONSISTENT);
|
|
99
|
-
});
|
|
100
|
-
|
|
101
|
-
it('TRANSPARENT_PIXEL should be consistent', async () => {
|
|
102
|
-
expect(scannerResult[scanner.TESTS.TRANSPARENT_PIXEL].consistent).to.equal(scanner.CONSISTENT);
|
|
103
|
-
});
|
|
104
|
-
|
|
105
|
-
it('SEQUENTUM should be consistent', async () => {
|
|
106
|
-
expect(scannerResult[scanner.TESTS.SEQUENTUM].consistent).to.equal(scanner.CONSISTENT);
|
|
107
|
-
});
|
|
108
|
-
|
|
109
|
-
// It may seem counter intuitive to have this test consistent with Chrome headless
|
|
110
|
-
// The reason is that the the test will be inconsistent only when Chrome headless decides
|
|
111
|
-
// to spoof its identity by changing its user agent
|
|
112
|
-
it('VIDEO_CODECS should be consistent', async () => {
|
|
113
|
-
expect(scannerResult[scanner.TESTS.VIDEO_CODECS].consistent).to.equal(scanner.CONSISTENT);
|
|
114
|
-
});
|
|
115
|
-
|
|
116
|
-
});
|