From 4bbda8916b007f6d125bac5e73950d10e2fe2d85 Mon Sep 17 00:00:00 2001 From: Elbert Alias Date: Fri, 29 Dec 2017 09:40:27 +1100 Subject: [PATCH] Avoid use of prototype functions in inject.js --- src/drivers/npm/driver.js | 2 +- src/drivers/webextension/js/driver.js | 2 +- src/drivers/webextension/js/inject.js | 56 ++++++++++++++++++--------- 3 files changed, 39 insertions(+), 21 deletions(-) diff --git a/src/drivers/npm/driver.js b/src/drivers/npm/driver.js index bb0af516f..7d1d1cea9 100644 --- a/src/drivers/npm/driver.js +++ b/src/drivers/npm/driver.js @@ -129,7 +129,7 @@ class Driver { const scripts = this.getScripts(browser); const js = this.getJs(browser); - this.wappalyzer.analyze(pageUrl.hostname, pageUrl.href, { + this.wappalyzer.analyze(pageUrl, { headers, html, js, diff --git a/src/drivers/webextension/js/driver.js b/src/drivers/webextension/js/driver.js index 113aefa00..d3be1fed8 100644 --- a/src/drivers/webextension/js/driver.js +++ b/src/drivers/webextension/js/driver.js @@ -160,7 +160,7 @@ browser.webRequest.onCompleted.addListener(request => { ( chrome || browser ).runtime.onMessage.addListener((message, sender, sendResponse) => { if ( typeof message.id != 'undefined' ) { if ( message.id !== 'log' ) { - wappalyzer.log('Message received from ' + message.source + ': ' + message.id, 'driver'); + wappalyzer.log('Message received' + ( message.source ? ' from ' + message.source : '' ) + ': ' + message.id, 'driver'); } var response; diff --git a/src/drivers/webextension/js/inject.js b/src/drivers/webextension/js/inject.js index ec504586f..ac3938f2a 100644 --- a/src/drivers/webextension/js/inject.js +++ b/src/drivers/webextension/js/inject.js @@ -9,35 +9,53 @@ const js = {}; - Object.keys(patterns).forEach(appName => { - js[appName] = {}; + for ( let appName in patterns ) { + if ( patterns.hasOwnProperty(appName) ) { + js[appName] = {}; - Object.keys(patterns[appName]).forEach(chain => { - js[appName][chain] = {}; + for ( let chain in patterns[appName] ) { + if ( patterns[appName].hasOwnProperty(chain) ) { + js[appName][chain] = {}; - patterns[appName][chain].forEach((pattern, index) => { - const value = detectJs(chain); + for ( let index in patterns[appName][chain] ) { + const value = detectJs(chain); - if ( value ) { - js[appName][chain][index] = value; + if ( value ) { + js[appName][chain][index] = value; + } + } } - }); - }); - }); + } + } + } postMessage({ id: 'js', js }, '*'); }), false); } catch(e) { // Fail quietly } -}()); -function detectJs(chain) { - const properties = chain.split('.'); + function detectJs(chain) { + try { + const properties = chain.split('.'); + + var value = properties.length ? window : null; + + for ( let i = 0; i < properties.length; i ++ ) { + var property = properties[i]; - const value = properties.reduce((parent, property) => { - return parent && parent.hasOwnProperty(property) ? parent[property] : null; - }, window); + if ( value.hasOwnProperty(property) ) { + value = value[property]; + } else { + value = null; - return typeof value === 'string' ? value : !!value; -} + break; + } + } + + return typeof value === 'string' ? value : !!value; + } catch(e) { + // Fail quietly + } + } +}());