From e52a895d558341bf7a1c3c94b1c60d061b72ee79 Mon Sep 17 00:00:00 2001 From: z0ccc Date: Mon, 27 Sep 2021 19:29:23 -0400 Subject: [PATCH] Added navigator block --- frontend/.eslintrc.js | 1 + frontend/public/worker.js | 5 + .../src/components/{ScanBlock.js => Block.js} | 0 .../components/{ScanBlocks.js => Blocks.js} | 10 +- frontend/src/components/ConnectionBlock.js | 2 +- frontend/src/components/FiltersBlock.js | 2 +- frontend/src/components/FingerprintBlock.js | 2 +- frontend/src/components/HardwareBlock.js | 2 +- frontend/src/components/IntlBlock.js | 2 +- frontend/src/components/LocationBlock.js | 2 +- frontend/src/components/MainColumn.js | 4 +- frontend/src/components/NavigatorBlock.js | 8 +- frontend/src/components/OtherBlock.js | 2 +- frontend/src/components/ScreenBlock.js | 2 +- frontend/src/components/SoftwareBlock.js | 2 +- frontend/src/components/UserAgentBlock.js | 200 +++++++++--------- frontend/src/utils/common.js | 9 +- frontend/src/utils/conenction.js | 1 - frontend/src/utils/navigator.js | 197 +++++++++++++++++ 19 files changed, 331 insertions(+), 122 deletions(-) rename frontend/src/components/{ScanBlock.js => Block.js} (100%) rename frontend/src/components/{ScanBlocks.js => Blocks.js} (89%) create mode 100644 frontend/src/utils/navigator.js diff --git a/frontend/.eslintrc.js b/frontend/.eslintrc.js index 417a8b0..6ab6eda 100644 --- a/frontend/.eslintrc.js +++ b/frontend/.eslintrc.js @@ -39,5 +39,6 @@ module.exports = { 'react/react-in-jsx-scope': 'off', 'no-bitwise': 'off', 'react/no-array-index-key': 'off', + 'dot-notation': 'off', }, }; diff --git a/frontend/public/worker.js b/frontend/public/worker.js index 93b3fce..51662e5 100644 --- a/frontend/public/worker.js +++ b/frontend/public/worker.js @@ -3,6 +3,11 @@ const data = { timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone, timezoneOffset: new Date().getTimezoneOffset(), date: new Date().toString(), + deviceMemory: navigator.deviceMemory, + hardwareConcurrency: navigator.hardwareConcurrency, + platform: navigator.platform, + userAgent: navigator.userAgent, + appVersion: navigator.appVersion, language: navigator.language, languages: navigator.languages, }; diff --git a/frontend/src/components/ScanBlock.js b/frontend/src/components/Block.js similarity index 100% rename from frontend/src/components/ScanBlock.js rename to frontend/src/components/Block.js diff --git a/frontend/src/components/ScanBlocks.js b/frontend/src/components/Blocks.js similarity index 89% rename from frontend/src/components/ScanBlocks.js rename to frontend/src/components/Blocks.js index f218d83..1856a0b 100644 --- a/frontend/src/components/ScanBlocks.js +++ b/frontend/src/components/Blocks.js @@ -29,9 +29,9 @@ const ScanBlocks = () => { {connectionData ? ( <>
- {/* - - + {/* */} + + {/* */}
@@ -43,8 +43,8 @@ const ScanBlocks = () => { workerData={workerData} connectionData={connectionData} /> - {/* - */} + + {/* */}
) : ( diff --git a/frontend/src/components/ConnectionBlock.js b/frontend/src/components/ConnectionBlock.js index aa0b993..47eb338 100644 --- a/frontend/src/components/ConnectionBlock.js +++ b/frontend/src/components/ConnectionBlock.js @@ -1,4 +1,4 @@ -import ScanBlock from './ScanBlock'; +import ScanBlock from './Block'; import Table from './Table'; import { getConnection } from '../utils/conenction'; diff --git a/frontend/src/components/FiltersBlock.js b/frontend/src/components/FiltersBlock.js index 03e7e1f..e00bea8 100644 --- a/frontend/src/components/FiltersBlock.js +++ b/frontend/src/components/FiltersBlock.js @@ -1,5 +1,5 @@ import { useState, useEffect } from 'react'; -import ScanBlock from './ScanBlock'; +import ScanBlock from './Block'; import Table from './Table'; const FiltersBlock = () => { diff --git a/frontend/src/components/FingerprintBlock.js b/frontend/src/components/FingerprintBlock.js index 6db3228..94dfbac 100644 --- a/frontend/src/components/FingerprintBlock.js +++ b/frontend/src/components/FingerprintBlock.js @@ -1,5 +1,5 @@ import { useState } from 'react'; -import ScanBlock from './ScanBlock'; +import ScanBlock from './Block'; import Table from './Table'; import { getHardware, diff --git a/frontend/src/components/HardwareBlock.js b/frontend/src/components/HardwareBlock.js index 02e5b92..12b68b6 100644 --- a/frontend/src/components/HardwareBlock.js +++ b/frontend/src/components/HardwareBlock.js @@ -1,5 +1,5 @@ import { useState, useEffect } from 'react'; -import ScanBlock from './ScanBlock'; +import ScanBlock from './Block'; import Table from './Table'; import { getHardware, getWebGL, getBattery } from './mainOld'; diff --git a/frontend/src/components/IntlBlock.js b/frontend/src/components/IntlBlock.js index 651b9be..ba90f36 100644 --- a/frontend/src/components/IntlBlock.js +++ b/frontend/src/components/IntlBlock.js @@ -1,6 +1,6 @@ /* eslint-disable no-unused-vars */ import { useState, useEffect } from 'react'; -import ScanBlock from './ScanBlock'; +import ScanBlock from './Block'; import Table from './Table'; import { getIntl } from './main'; import { ReactComponent as CheckCircle } from '../images/checkCircle.svg'; diff --git a/frontend/src/components/LocationBlock.js b/frontend/src/components/LocationBlock.js index 46d090f..f00a23e 100644 --- a/frontend/src/components/LocationBlock.js +++ b/frontend/src/components/LocationBlock.js @@ -1,4 +1,4 @@ -import ScanBlock from './ScanBlock'; +import ScanBlock from './Block'; import Table from './Table'; import { getMap, getLocation } from '../utils/conenction'; diff --git a/frontend/src/components/MainColumn.js b/frontend/src/components/MainColumn.js index 1ab1a04..a90b114 100644 --- a/frontend/src/components/MainColumn.js +++ b/frontend/src/components/MainColumn.js @@ -1,11 +1,11 @@ import Logo from './Logo'; -import ScanBlocks from './ScanBlocks'; +import Blocks from './Blocks'; const MainColumn = () => ( <>
- +
); diff --git a/frontend/src/components/NavigatorBlock.js b/frontend/src/components/NavigatorBlock.js index 863672b..5041b18 100644 --- a/frontend/src/components/NavigatorBlock.js +++ b/frontend/src/components/NavigatorBlock.js @@ -1,11 +1,11 @@ -import ScanBlock from './ScanBlock'; +import ScanBlock from './Block'; import Table from './Table'; -import { getNavigator } from './main'; +import getNavigator from '../utils/navigator'; -const NavigatorBlock = () => ( +const NavigatorBlock = ({ workerData }) => (

Navigator

- +

Explanation: JavaScript can be used to find information about your hardware. This information can be used to create a fingerprint. diff --git a/frontend/src/components/OtherBlock.js b/frontend/src/components/OtherBlock.js index c73302c..69737bb 100644 --- a/frontend/src/components/OtherBlock.js +++ b/frontend/src/components/OtherBlock.js @@ -1,7 +1,7 @@ /* eslint-disable arrow-body-style */ /* eslint-disable no-unused-vars */ import { useState, useEffect } from 'react'; -import ScanBlock from './ScanBlock'; +import ScanBlock from './Block'; import { detectTor } from './main'; const OtherBlock = () => { diff --git a/frontend/src/components/ScreenBlock.js b/frontend/src/components/ScreenBlock.js index 007ba86..8504921 100644 --- a/frontend/src/components/ScreenBlock.js +++ b/frontend/src/components/ScreenBlock.js @@ -1,4 +1,4 @@ -import ScanBlock from './ScanBlock'; +import ScanBlock from './Block'; import Table from './Table'; import getScreen from '../utils/screen'; diff --git a/frontend/src/components/SoftwareBlock.js b/frontend/src/components/SoftwareBlock.js index cc2a713..7ecae12 100644 --- a/frontend/src/components/SoftwareBlock.js +++ b/frontend/src/components/SoftwareBlock.js @@ -1,4 +1,4 @@ -import ScanBlock from './ScanBlock'; +import ScanBlock from './Block'; import Table from './Table'; import { getSoftware } from './mainOld'; diff --git a/frontend/src/components/UserAgentBlock.js b/frontend/src/components/UserAgentBlock.js index cb954c7..271f437 100644 --- a/frontend/src/components/UserAgentBlock.js +++ b/frontend/src/components/UserAgentBlock.js @@ -1,105 +1,105 @@ -/* eslint-disable no-unused-vars */ -import { useState, useEffect } from 'react'; -import Bowser from 'bowser'; -import ScanBlock from './ScanBlock'; -import Table from './Table'; -import { - checkNavigatorProperties, - checkWebWorker, - checkScreenProperties, -} from './main'; -import { ReactComponent as CheckCircle } from '../images/checkCircle.svg'; +// /* eslint-disable no-unused-vars */ +// import { useState, useEffect } from 'react'; +// import Bowser from 'bowser'; +// import ScanBlock from './Block'; +// import Table from './Table'; +// import { +// checkNavigatorProperties, +// checkWebWorker, +// checkScreenProperties, +// } from './main'; +// import { ReactComponent as CheckCircle } from '../images/checkCircle.svg'; -const UserAgentBlock = () => { - const [firstRender, setfirstRender] = useState(true); - const [workerData, setWorkerData] = useState(''); - const [userAgent, setUserAgent] = useState(); +// const UserAgentBlock = () => { +// const [firstRender, setfirstRender] = useState(true); +// const [workerData, setWorkerData] = useState(''); +// const [userAgent, setUserAgent] = useState(); - useEffect(() => { - checkWebWorker('userAgent', setWorkerData); - }, []); +// useEffect(() => { +// checkWebWorker('userAgent', setWorkerData); +// }, []); - useEffect(() => { - if (!workerData) { - setUserAgent(Bowser.parse(navigator.userAgent)); - } else { - setUserAgent(Bowser.parse(workerData)); - } - }, [workerData]); +// useEffect(() => { +// if (!workerData) { +// setUserAgent(Bowser.parse(navigator.userAgent)); +// } else { +// setUserAgent(Bowser.parse(workerData)); +// } +// }, [workerData]); - return ( - -

User Agent

- {userAgent && ( -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Browser{userAgent.browser.name} - -
Browser version{userAgent.browser.version} - -
OS - {userAgent.os.name} {userAgent.os.versionName} - - -
OS version{userAgent.os.version} - -
Engine - {userAgent.engine.name} {userAgent.engine.version} - - -
Platform type{userAgent.platform.type} - -
- - )} -

- Explanation: JavaScript can be used to find information about - your hardware. This information can be used to create a fingerprint. -

-
- ); -}; +// return ( +// +//

User Agent

+// {userAgent && ( +//
+// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +//
Browser{userAgent.browser.name} +// +//
Browser version{userAgent.browser.version} +// +//
OS +// {userAgent.os.name} {userAgent.os.versionName} +// +// +//
OS version{userAgent.os.version} +// +//
Engine +// {userAgent.engine.name} {userAgent.engine.version} +// +// +//
Platform type{userAgent.platform.type} +// +//
+//
+// )} +//

+// Explanation: JavaScript can be used to find information about +// your hardware. This information can be used to create a fingerprint. +//

+//
+// ); +// }; -export default UserAgentBlock; +// export default UserAgentBlock; diff --git a/frontend/src/utils/common.js b/frontend/src/utils/common.js index b2b2473..6333e17 100644 --- a/frontend/src/utils/common.js +++ b/frontend/src/utils/common.js @@ -1,4 +1,4 @@ -export { fetchAPI, getWebWorker }; +export { fetchAPI, checkWebWorker, getWebWorker }; // Gets location values const fetchAPI = (setData) => { @@ -9,6 +9,13 @@ const fetchAPI = (setData) => { }); }; +const checkWebWorker = (key, worker) => { + if (key.toString() !== worker.toString()) { + return `Did not match web worker (${worker})`; + } + return null; +}; + const getWebWorker = () => { let w; if (typeof w === 'undefined') { diff --git a/frontend/src/utils/conenction.js b/frontend/src/utils/conenction.js index 32a1699..a86c03f 100644 --- a/frontend/src/utils/conenction.js +++ b/frontend/src/utils/conenction.js @@ -62,7 +62,6 @@ const getLocation = (data, workerData) => { // Returns object with location data const getConnection = (data) => { - console.log(data); const isProxy = checkProxy(data.proxy); return [ { diff --git a/frontend/src/utils/navigator.js b/frontend/src/utils/navigator.js new file mode 100644 index 0000000..8413e1d --- /dev/null +++ b/frontend/src/utils/navigator.js @@ -0,0 +1,197 @@ +import { checkWebWorker } from './common'; + +const getDeviceMemory = (key, worker) => ({ + key, + value: navigator[key], + issues: [ + checkNavigatorProperties(key), + checkNavigatorValue(key), + checkNavigatorPrototype(key), + checkWebWorker(navigator[key], worker), + ], +}); + +const getHardwareConcurrency = (key, worker) => ({ + key, + value: navigator.hardwareConcurrency, + issues: [ + checkNavigatorProperties(key), + checkNavigatorValue(key), + checkNavigatorPrototype(key), + checkWebWorker(navigator[key], worker), + ], +}); + +const getMaxTouchPoints = (key) => ({ + key, + value: navigator.maxTouchPoints, + issues: [ + checkNavigatorProperties(key), + checkNavigatorValue(key), + checkNavigatorPrototype(key), + ], +}); + +const getPlatform = (key, worker) => ({ + key, + value: navigator.platform, + issues: [ + checkNavigatorProperties(key), + checkNavigatorValue(key), + checkNavigatorPrototype(key), + checkWebWorker(navigator[key], worker), + ], +}); + +const getUserAgent = (key, worker) => ({ + key, + value: navigator.userAgent, + issues: [ + checkNavigatorProperties(key), + checkNavigatorValue(key), + checkNavigatorPrototype(key), + checkWebWorker(navigator[key], worker), + ], +}); + +const getAppVersion = (key, worker) => ({ + key, + value: navigator.appVersion, + issues: [ + checkNavigatorProperties(key), + checkNavigatorValue(key), + checkNavigatorPrototype(key), + checkWebWorker(navigator[key], worker), + ], +}); + +const getLanguage = (key, worker) => ({ + key, + value: navigator.language, + issues: [ + checkNavigatorProperties(key), + checkNavigatorValue(key), + checkNavigatorPrototype(key), + checkWebWorker(navigator[key], worker), + ], +}); + +const getLanguages = (key, worker) => ({ + key, + value: navigator.languages, + issues: [ + checkNavigatorProperties(key), + checkNavigatorValue(key), + checkNavigatorPrototype(key), + checkWebWorker(navigator[key], worker), + ], +}); + +const getCookieEnabled = (key) => ({ + key, + value: navigator.cookieEnabled ? 'True' : 'False', + issues: [ + checkNavigatorProperties(key), + checkNavigatorValue(key), + checkNavigatorPrototype(key), + ], +}); + +const getDoNotTrack = (key) => ({ + key, + value: navigator.doNotTrack ? 'True' : 'False', + issues: [ + checkNavigatorProperties(key), + checkNavigatorValue(key), + checkNavigatorPrototype(key), + ], +}); + +const getWebDriver = (key) => ({ + key, + value: navigator.webdriver ? 'True' : 'False', + issues: [ + checkNavigatorProperties(key), + checkNavigatorValue(key), + checkNavigatorPrototype(key), + ], +}); + +const getPlugins = (key) => ({ + key, + value: sortPlugins(navigator.plugins), + issues: [ + checkNavigatorProperties(key), + checkNavigatorValue(key), + checkNavigatorPrototype(key), + ], +}); + +const getVendor = (key) => ({ + key, + value: navigator.vendor, + issues: [ + checkNavigatorProperties(key), + checkNavigatorValue(key), + checkNavigatorPrototype(key), + ], +}); + +// sorts plugins object into comma separated list +const sortPlugins = (data) => { + const { length } = data; + + let list = ''; + for (let i = 0; i < length; i++) { + if (i !== 0) list += ', '; + list += data[i].name; + } + return list; +}; + +const checkNavigatorProperties = (key) => { + if (Object.getOwnPropertyDescriptor(navigator, key) !== undefined) { + return 'Failed undefined properties'; + } + return null; +}; + +const checkNavigatorValue = (key) => { + if ( + Object.getOwnPropertyDescriptor(Navigator.prototype, key).value !== + undefined + ) { + return 'Failed descriptor.value undefined'; + } + return null; +}; + +const checkNavigatorPrototype = (key) => { + try { + // eslint-disable-next-line no-unused-vars + const check = Navigator.prototype[key]; + return 'Failed Navigator.prototype'; + } catch (err) { + // eslint-disable-next-line no-unused-vars + const check = ''; + } + return null; +}; + +const getNavigator = (workerData) => [ + getDeviceMemory('deviceMemory', workerData.deviceMemory), + getHardwareConcurrency('hardwareConcurrency', workerData.hardwareConcurrency), + getMaxTouchPoints('maxTouchPoints'), + getPlatform('platform', workerData.platform), + getUserAgent('userAgent', workerData.userAgent), + getAppVersion('appVersion', workerData.appVersion), + getLanguage('language', workerData.language), + getLanguages('languages', workerData.languages), + getCookieEnabled('cookieEnabled'), + getDoNotTrack('doNotTrack'), + getWebDriver('webdriver'), + getPlugins('plugins'), + getVendor('vendor'), +]; + +export default getNavigator;