2017-03-11 2 views
2

Ich bin ein WebExtension in Javascript für Firefox entwickeln, Chrome usw.Zwingende Browser API

Es entwickelt, um den Benutzer-Browser, um zu verhindern Fingerabdrücke abgenommen werden.

Da die meisten Informationen zum Erstellen von Browser-Fingerabdrücken von JavaScript-APIs im Browser selbst stammen, ist es möglich, die Werte zu ändern/zu fälschen, die gängige APIs aus einer Webextension/einem Add-On zurückgeben?

Wenn dies nicht direkt möglich ist, gibt es eine Möglichkeit zu kontrollieren, welche Werte diese APIs auf die Website zurückführen, um die Privatsphäre des Benutzers zu schützen?

Beispiele von APIs über die ich spreche, sind:

user agent 
screen print 
color depth 
current resolution 
available resolution 
device XDPI 
device YDPI 
plugin list 
font list 
local storage 
session storage 
timezone 
language 
system language 
cookies 
canvas print 

Antwort

1

Sie versuchen Object.defineProperty() verwenden, können:

Die Object.defineProperty() -Methode direkt auf einem Objekt ein neues Objekt definiert, oder ändert eine vorhandene Eigenschaft für ein Objekt und gibt das Objekt zurück.

console.log(window.screen.colorDepth); // 24 
 

 
Object.defineProperty(window.screen, 'colorDepth', { 
 
    value: 'hello world', 
 
    configurable: true 
 
}); 
 

 
console.log(window.screen.colorDepth); // hello world

In der obigen wir Object.defineProperty verwenden window.screen.colorDepth den Wert der Eigenschaft zu ändern. Hier würden Sie die Werte mit der von Ihnen gewünschten Methode spoofen. Sie können dieselbe Logik verwenden, um die Eigenschaften zu ändern, die Sie fälschen möchten (z. B. navigator.userAgent).

Es gibt jedoch eine Trennung zwischen dem globalen Objekt der Seite und dem globalen Plugins-Objekt. Sie sollten das überwinden können, indem Sie das Skript in das Dokument eingespritzt:

var code = function() { 
    console.log(window.screen.colorDepth); // 24 

    Object.defineProperty(window.screen, 'colorDepth', { 
     value: 'hello world', 
     configurable: true 
    }); 

    console.log(window.screen.colorDepth); // hello world 
}; 

var script = document.createElement('script'); 
script.textContent = '(' + code + ')()'; 
(document.head||document.documentElement).appendChild(script); 

Siehe here und here für weitere Informationen. Sie können eine funktionierende Chrome-Erweiterung mit dem obigen Code here herunterladen (entpacken Sie den Ordner, navigieren Sie zu chrome: // Erweiterungen in chrome und legen Sie den Ordner in das Fenster ab)