Skip to content

Commit

Permalink
Merge branch 'ft-domain_blacklist_dom_start'
Browse files Browse the repository at this point in the history
* ft-domain_blacklist_dom_start:
  Added logic to perform the blacklisting on document_start - this makes the redirect faster, and doesn't wait for page load, which caused sometimes the phishing alert to not happen.
  • Loading branch information
Harry Denley committed Jul 17, 2017
2 parents 1dde8ca + 77484c1 commit c8faa72
Show file tree
Hide file tree
Showing 3 changed files with 98 additions and 93 deletions.
94 changes: 2 additions & 92 deletions js/DomManipulator.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,57 +4,18 @@ class EtherAddressLookup {

constructor()
{
console.log("Init");
console.log("Init EAL");
this.setDefaultExtensionSettings();
this.init();
}

levenshtein(a, b) {
if(a.length == 0) return b.length;
if(b.length == 0) return a.length;

// swap to save some memory O(min(a,b)) instead of O(a)
if(a.length > b.length) {
var tmp = a;
a = b;
b = tmp;
}

var row = [];
// init the row
for(var i = 0; i <= a.length; i++){
row[i] = i;
}

// fill in the rest
for(var i = 1; i <= b.length; i++){
var prev = i;
for(var j = 1; j <= a.length; j++){
var val;
if(b.charAt(i-1) == a.charAt(j-1)){
val = row[j-1]; // match
} else {
val = Math.min(row[j-1] + 1, // substitution
prev + 1, // insertion
row[j] + 1); // deletion
}
row[j - 1] = prev;
prev = val;
}
row[a.length] = prev;
}

return row[a.length];
}

setDefaultExtensionSettings()
{
this.blHighlight = false;
this.blBlacklistDomains = true;
this.strBlockchainExplorer = "https://etherscan.io/address";

this.intSettingsCount = 0;
this.intSettingsTotalCount = 3;
this.intSettingsTotalCount = 2;
}

//Gets extension settings and then converts addresses to links
Expand All @@ -75,14 +36,6 @@ class EtherAddressLookup {
++this.intSettingsCount;
}.bind(this));

//Get the blacklist domains option for the user
objBrowser.runtime.sendMessage({func: "blacklist_domains"}, function(objResponse) {
if(objResponse && objResponse.hasOwnProperty("resp")) {
this.blBlacklistDomains = (objResponse.resp == 1 ? true : false);
}
++this.intSettingsCount;
}.bind(this));

//Update the DOM once all settings have been received...
setTimeout(function() {
if(true || this.intSettingsCount === this.intSettingsTotalCount) {
Expand Down Expand Up @@ -141,49 +94,6 @@ class EtherAddressLookup {
}
return false;
}

//Detects if the current tab is in the blacklisted domains file
blacklistedDomainCheck()
{
let objBrowser = chrome ? chrome : browser;
var self = this;
var arrBlacklistedDomains = [];
var arrWhitelistedDomains = ["www.myetherwallet.com", "myetherwallet.com"];
objBrowser.runtime.sendMessage({func: "blacklist_domain_list"}, function(objResponse) {
if(objResponse && objResponse.hasOwnProperty("resp")) {
arrBlacklistedDomains = objResponse.resp;
}
}.bind(arrBlacklistedDomains));

objBrowser.runtime.sendMessage({func: "whitelist_domain_list"}, function(objResponse) {
if(objResponse && objResponse.hasOwnProperty("resp")) {
arrWhitelistedDomains = objResponse.resp;
}
}.bind(arrWhitelistedDomains));

setTimeout(function() {
if(arrBlacklistedDomains.length > 0) {
var strCurrentTab = window.location.hostname;

//Domain is whitelisted, don't check the blacklist.
if(arrWhitelistedDomains.includes(strCurrentTab)) {
console.log("Domain "+ strCurrentTab +" is whitelisted on EAL!");
return;
}

//Levenshtien - @sogoiii
var isBlacklisted = arrBlacklistedDomains.includes(strCurrentTab);
var source = strCurrentTab.replace(/\./g,'');
var intHolisticMetric = self.levenshtein(source, 'myetherwallet');
var intHolisticLimit = 7 // How different can the word be?
var blHolisticStatus = (intHolisticMetric > 0 && intHolisticMetric < intHolisticLimit) ? true : false;

if (isBlacklisted || blHolisticStatus ) {
window.location.href = "https://harrydenley.com/EtherAddressLookup/phishing.html";
}
}
}.bind(arrBlacklistedDomains), 500)
}
}

window.addEventListener("load", function() {
Expand Down
91 changes: 91 additions & 0 deletions js/DomainBlacklist.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
(function() {
let objBrowser = chrome ? chrome : browser;
//Get the blacklist domains option for the user
objBrowser.runtime.sendMessage({func: "blacklist_domains"}, function(objResponse) {
if(objResponse && objResponse.hasOwnProperty("resp")) {
if(objResponse.resp == 1) {
blacklistedDomainCheck();
}
}
});

//Detects if the current tab is in the blacklisted domains file
function blacklistedDomainCheck()
{
let objBrowser = chrome ? chrome : browser;
var arrBlacklistedDomains = [];
var arrWhitelistedDomains = ["www.myetherwallet.com", "myetherwallet.com"];
objBrowser.runtime.sendMessage({func: "blacklist_domain_list"}, function(objResponse) {
if(objResponse && objResponse.hasOwnProperty("resp")) {
arrBlacklistedDomains = objResponse.resp;
objBrowser.runtime.sendMessage({func: "whitelist_domain_list"}, function(objResponse) {
if(objResponse && objResponse.hasOwnProperty("resp")) {
arrWhitelistedDomains = objResponse.resp;
return doBlacklistCheck();
}
}.bind(arrWhitelistedDomains));
}
}.bind(arrBlacklistedDomains));

function doBlacklistCheck() {
if(arrBlacklistedDomains.length > 0) {
var strCurrentTab = window.location.hostname;

//Domain is whitelisted, don't check the blacklist.
if(arrWhitelistedDomains.includes(strCurrentTab)) {
console.log("Domain "+ strCurrentTab +" is whitelisted on EAL!");
return;
}

//Levenshtien - @sogoiii
var isBlacklisted = arrBlacklistedDomains.includes(strCurrentTab);
var source = strCurrentTab.replace(/\./g,'');
var intHolisticMetric = levenshtein(source, 'myetherwallet');
var intHolisticLimit = 7 // How different can the word be?
var blHolisticStatus = (intHolisticMetric > 0 && intHolisticMetric < intHolisticLimit) ? true : false;

if (isBlacklisted || blHolisticStatus ) {
window.location.href = "https://harrydenley.com/EtherAddressLookup/phishing.html";
}
}
}
}

function levenshtein(a, b) {
if(a.length == 0) return b.length;
if(b.length == 0) return a.length;

// swap to save some memory O(min(a,b)) instead of O(a)
if(a.length > b.length) {
var tmp = a;
a = b;
b = tmp;
}

var row = [];
// init the row
for(var i = 0; i <= a.length; i++){
row[i] = i;
}

// fill in the rest
for(var i = 1; i <= b.length; i++){
var prev = i;
for(var j = 1; j <= a.length; j++){
var val;
if(b.charAt(i-1) == a.charAt(j-1)){
val = row[j-1]; // match
} else {
val = Math.min(row[j-1] + 1, // substitution
prev + 1, // insertion
row[j] + 1); // deletion
}
row[j - 1] = prev;
prev = val;
}
row[a.length] = prev;
}

return row[a.length];
}
})();
6 changes: 5 additions & 1 deletion manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"name": "EtherAddressLookup",
"short_name": "EtherAddressLookup",
"description": "Adds links to strings that look like Ethereum addresses to your favorite blockchain explorer.",
"version": "1.4.0",
"version": "1.4.1",

"browser_action": {
"default_icon": "images/icon.png",
Expand All @@ -17,6 +17,10 @@
],

"content_scripts":[{
"run_at": "document_start",
"matches": ["http://*/*", "https://*/*"],
"js": ["js/DomainBlacklist.js"]
},{
"run_at": "document_end",
"matches": ["http://*/*", "https://*/*"],
"js": ["js/DomManipulator.js"],
Expand Down

0 comments on commit c8faa72

Please sign in to comment.