it-swarm-eu.dev

Können Websites erkennen, ob Sie den privaten Browsermodus verwenden?

Die meisten modernen Browser unterstützen " privater Browsermodus " (auch bekannt als Chrome als "Inkognito-Modus")), wobei der Browser keine Informationen über Ihr Browsing auf der Festplatte speichert in diesem Modus.

Kann eine Website in modernen Browsern erkennen, ob für einen Benutzer, der die Website besucht, der private Browsermodus aktiviert ist oder nicht?

Die Hintergrundrecherche, die ich durchgeführt habe. Folgendes konnte ich im Zusammenhang mit dieser Frage finden. Leider beantwortet es die obige Frage nicht wirklich.

  • Eine 2010-Studie des privaten Browsermodus zeigte, dass Websites mithilfe eines CSS-Verlaufs-Sniffing-Angriffs erkennen können, ob sich der Browser im privaten Browsermodus befindet. (Im privaten Browsermodus werden Websites nicht zum Verlauf hinzugefügt, sodass Sie mithilfe des Verlaufs-Sniffing überprüfen können, ob sich der Besucher im privaten Browsermodus befindet.) Seitdem haben moderne Browser Abwehr - integriert. gegen CSS-Verlaufs-Sniffing-Angriffe.

    Folglich würde ich nicht erwarten, dass diese Methode zum Erkennen, ob sich der Browser im privaten Browsermodus befindet, länger erfolgreich ist. (Mir ist klar, dass die Abwehrkräfte gegen das Schnüffeln in der Geschichte nicht perfekt sind, aber sie können für diese Zwecke gut genug sein.)

  • Es kann Möglichkeiten für eine Website geben, die Sie besuchen lernen , ob Sie derzeit auf anderen Websites angemeldet sind (denken Sie an: Facebook). Wenn der Benutzer derzeit bei anderen Diensten (wie Facebook) angemeldet ist, könnte eine Website plausibel vermuten, dass der Benutzer derzeit nicht den privaten Browsermodus verwendet - dies ist keine sichere Sache, aber möglicherweise könnte man eine Art probabilistischen Rückschluss ziehen. Wenn der Benutzer jedoch nicht bei anderen Diensten angemeldet ist, können wir wohl nur sagen, dass wir nicht wissen, ob der private Browsermodus verwendet wird. Es ist möglich, dass dies zu einem teilweisen Informationsleck führt, aber es klingt bestenfalls unzuverlässig - wenn es überhaupt funktioniert. Es ist auch möglich, dass dies überhaupt nicht funktioniert.

Kann jemand aktuellere Informationen darüber bereitstellen, ob eine Website testen kann, ob ihre Besucher den privaten Browsermodus verwenden?

64
D.W.

Ich bin nicht sicher, ob Sie zuverlässig privates Surfen erkennen können, aber ich denke, Sie können möglicherweise einige Heuristiken anwenden, um eine gute Vermutung anzustellen, dass es sich um einen Benutzer handelt Verwenden verschiedener Funktionen zur Verbesserung der Privatsphäre. Wie in meinem Kommentar zur Frage angegeben, hängt es davon ab, was Sie als Reaktion auf die Erkennung des privaten Browsings tun möchten, ob dies gut genug ist oder zu Ihrer Anwendung passt. Wie Sonny Ordell erwähnte, bin ich mir auch nicht sicher, ob Sie das private Surfen von der Ad-hoc-Verwendung verschiedener Funktionen zur Verbesserung der Privatsphäre unterscheiden können (z. B. manuelles Löschen des Verlaufs oder von Cookies).

Angenommen, Sie betreiben eine Webanwendung und möchten erkennen, wann einer Ihrer Benutzer (mit einem Konto) zum privaten Surfen wechselt. Ich gebe an, dass der Benutzer ein Konto hat, da diese Strategie auf der Verfolgung verschiedener Verhaltensdaten beruht. Die Aspekte des privaten Browsings sind (zumindest in Firefox ): Verlauf, Formular-/Sucheinträge, Passwörter, Downloads, Cookies, Cache, DOM-Speicher. Ich bin nicht sicher, wie ich nach Downloads suchen soll, aber ich denke, die anderen können untersucht werden. Wenn Sie bei allen eine positive Erkennung erhalten, ist es wahrscheinlicher, dass Ihr Benutzer privat surft.

  • Im trivialen Fall behalten Sie für jeden Benutzer den Überblick über (IP, user-agent). Wenn Sie eine Anfrage ohne Cookies für einen übereinstimmenden (IP, UA) - Datensatz erhalten, können Sie daraus schließen, dass der entsprechende Benutzer privat surft. Diese Methode schlägt fehl (keine Erkennung), wenn:

    1. Er verwendet so etwas wie ProxySwitchy oder TorButton, um Tor beim privaten Surfen zu aktivieren und so die IP zu ändern.
    2. Er wechselt zu einem anderen Browser (z. B. verwendet normalerweise FF und wechselt zu Chrome für den Inkognito-Modus).
    3. Der Wechsel zum privaten Surfen erfolgt nicht sofort und sein ISP hat eine neue IP-Adresse vergeben (z. B. am Freitag war er 10.1.2.3, er hat Ihre App über das Wochenende nicht verwendet und am Montag ist er 10.1.4.5).

    Wie in Sonny Ordells Antwort erwähnt, erhalten Sie eine Erkennung, wenn eine andere Person denselben Browser im privaten Browsermodus verwendet, um auf ein separates Konto auf Ihrer Website zuzugreifen. Dies ist jedoch ein etwas anderer Fall als wenn Der "normale" Benutzer wechselt einfach in den privaten Browsermodus.

    Sie erhalten ein falsches Positiv, wenn der Benutzer einfach seine Cookies für Ihre Website löscht oder ein sekundäres Profil verwendet (z. B. behalte ich einige bestimmte Firefox-Profile mit unterschiedlichen Plugins für bestimmte Tests und/oder um das Tracking zu vermeiden, obwohl ich dies tue Ich denke, das ist sehr ungewöhnlich.

  • Als komplexere Prüfung könnten Sie so etwas wie EFFs Panopticlick verwenden und einen Browser-Fingerabdruck (oder eine Sammlung von Fingerabdrücken) anstelle nur der UA für jeden Benutzer verwalten. Dies schlägt in der oben erwähnten Situation 2 fehl (z. B. wenn der Benutzer FF ausschließlich zum identifizierbaren Surfen verwendet und Chrome für inkognito). Der Fingerabdruck ist viel allgemeiner (und daher viel weniger nützlich), wenn der Benutzer Wenn Javascript deaktiviert ist, ändert sich der Fingerabdruck , wenn der Benutzer Javascript in verschiedenen Sitzungen selektiv aktiviert (z. B. NoScript mit vorübergehend zulässigen Websites).

  • Möglicherweise können Sie Problem 1 (Tor) beseitigen, indem Sie den Zugriff über einen Tor-Ausgangsknoten erkennen und diesen mit einem Fingerabdruck kombinieren. Dies scheint nur in einer begrenzten Anzahl von Fällen hilfreich zu sein.

  • Anstatt nur Cookies für die oben genannten Prüfungen zu verwenden, testen Sie localStorage. Wenn es normalerweise aktiviert ist und Ihr Schlüssel für diesen Besuch nicht im Speicher ist und der Fingerabdruck übereinstimmt, handelt es sich wahrscheinlich um privates Surfen. Wenn der Benutzer normalerweise den Speicher deaktiviert hat, können Sie ihn natürlich nicht verwenden. Die Fehlermodi ähneln den oben für Cookies beschriebenen.

  • Ich habe die Idee nicht getestet oder entwickelt, aber ich nehme an, Sie könnten Spiele mit Cache-Control Spielen. (Eine kurze Suche zeigt dass dies keine originelle Idee ist - dieses Projekt hat so etwas wie Proof-of-Concept-Code.) Diese Strategie schlägt fehl, wenn der Benutzer geht über einen gemeinsam genutzten Caching-Proxy - auf der Zwischenzeit wird anonymizer.com erwähnt. Zumindest Firefox verwendet den Cache nicht im privaten Browsermodus. (Eine Demo des Cache-basierten Trackings finden Sie unter diese Site .) Sie können dies also mit dem oben genannten UA/Fingerprinting kombinieren: Wenn Ihr Cache-Tracker anzeigt, dass es sich um einen ersten Besuch handelt, können Sie dies erraten Der Benutzer surft privat. Dies schlägt mit einem falsch positiven Ergebnis fehl, wenn der Benutzer seinen Cache bereinigt. Kombinieren Sie es mit anderen Techniken, um eine bessere Vermutung zu erhalten.

  • Sie können für jeden Benutzer erkennen und verfolgen, ob der Browser ein bestimmtes Formularelement automatisch ausfüllt. Wenn Sie feststellen, dass ein bestimmter Benutzer dieses Formularelement nicht automatisch ausfüllt, können Sie auf privates Surfen schließen. Dies ist spröde - möglicherweise verwendet der Benutzer seinen "primären" Computer nicht, aber Sie können ihn wie oben erwähnt mit Fingerabdrücken kombinieren, um eine zuverlässigere Vermutung zu erhalten.

  • Side-Channel-Timing-Angriff: Ermitteln und verfolgen Sie die typische Zeit, die jeder Benutzer benötigt, um sich bei Ihrer App anzumelden. Es wird Variationen geben, aber ich vermute, dass Sie eine genaue Vermutung darüber erhalten können, ob jemand das automatische Ausfüllen von Passwörtern verwendet. Wenn ein Benutzer normalerweise das automatische Ausfüllen von Passwörtern verwendet (d. H. Einen schnellen Übergang durch die Anmeldeseite) und dann für einen bestimmten Besuch (mit einem passenden Fingerabdruck) das automatische Ausfüllen nicht verwendet, können Sie auf privates Surfen schließen. Auch dies ist spröde; Kombinieren Sie mit anderen Techniken für eine bessere Vermutung. Sie möchten auch die Netzwerklatenz bei einer bestimmten Seitenlast erkennen und korrigieren (z. B. ist das Netzwerk des Benutzers an einem bestimmten Tag möglicherweise nur langsam, und ein langsamer Übergang der Anmeldeseite ist nur eine Latenz und kein Mangel an automatischem Ausfüllen). Sie können etwas böse sein und den Benutzer automatisch abmelden (geben Sie ihm eine falsche Fehlermeldung, "Bitte versuchen Sie es erneut"), um einen zweiten Datenpunkt zu erhalten, wenn Sie bereit sind, Ihre Benutzer ein wenig zu ärgern.

  • Kombinieren Sie dies mit dem, was Sie in der Frage zum Erkennen, ob der Benutzer bei anderen Diensten (z. B. Facebook) angemeldet ist, erwähnt haben, und Sie können mehr Vertrauen in Ihre Vermutung haben.

  • Wenn Sie wirklich motiviert sind, können Sie Spiele mit DNS spielen und die Ladezeiten der Seiten verfolgen. Ein schneller Test von FF 3.6 und Chrome 15 scheint darauf hinzudeuten, dass keiner der Browser den DNS-Cache im privaten Browsermodus löscht. Und der Browser hat absolut keine Kontrolle über den DNS-Cache des lokalen Systems. Wenn Sie verwenden Bei einem Seitenkanal-DNS-Timing-Angriff zur Durchführung der Benutzerverfolgung als Alternative (oder zusätzlich zum) Fingerabdruck erhalten Sie möglicherweise eine zuverlässigere Vermutung. Ich bin mir nicht sicher, wie zuverlässig die Verfolgung über das DNS-Timing sein wird.

Die Erkennung "anonymer" Benutzer im privaten Browsermodus ist viel schwieriger, da Sie nicht die Möglichkeit hatten, Daten über ihr "typisches" Verhalten zu sammeln. Und da die meisten Funktionen erst nach Beendigung der Browsersitzung aktiviert werden, wissen Sie nicht genau, ob sie jemals zurückkehren werden.

Vor diesem Hintergrund finden Sie hier eine Idee, um das private Surfen durch anonyme Benutzer zu erkennen, wenn Sie bereit sind, böse zu sein, und Sie über eine Ressource verfügen, für die Sie wussten, dass ein Benutzer bereit ist, Ihrer Website eine zweite Chance zu geben, und Sie können das erzwingen Benutzer, um Javascript zu aktivieren. Verfolgen Sie den Fingerabdruck, setzen Sie ein dauerhaftes Cookie, localStorage, Cache - was auch immer Sie tun können, um den Benutzer zu verfolgen. Wenn es sich laut Ihrem Fingerabdruck um einen ersten Besuch handelt, stürzen Sie den Browser über Javascript (oder Flash oder andere böse Tricks, die Sie kennen) ab. Nehmen Sie Tonnen von Speicher auf oder bleiben Sie in einer Schleife stecken oder was auch immer nötig ist, damit der Benutzer den Browser schließt. Wenn sie dann zurückkehren, sehen Sie (anhand des Fingerabdrucks), dass es sich um einen zweiten Besuch handelt. Wenn das Cookie/storage/cache/etc nicht gesetzt ist, können Sie daraus schließen, dass die erste Sitzung privates Surfen war, und ich nehme an, Sie schließen daraus, dass die zweite Sitzung wahrscheinlich auch privates Surfen ist. Dies schlägt offensichtlich fehl, wenn der Benutzer nicht zurückkommt oder wenn Sie ihn nicht zum Absturz bringen oder davon überzeugen können, das Browserfenster zu schließen. Wenn Sie sie als Bonus an eine benutzerdefinierte URL senden und sie sich im nicht privaten Modus befinden und die Browsersitzung wiederherstellen, können Sie davon ausgehen, dass sie sich nicht im privaten Browsermodus befinden (es sei denn, sie haben die URL mit einem Lesezeichen versehen).

Alles oben ist voller Löcher - viel Platz für falsch positive oder negative Ergebnisse. Sie werden wahrscheinlich nie erfahren, ob ich privates Surfen verwende oder ob ich einen Browser in einem VM ohne dauerhaften Speicher) ausführe. (Was ist der Unterschied?)

Das Schlimmste ist wahrscheinlich, dass wenn Sie eine Antwort mit einer zuverlässigen Methode zum Erkennen des privaten Browsings erhalten, es unwahrscheinlich ist, dass es sehr lange lebensfähig bleibt Browser "reparieren" es entweder oder Benutzer finden Problemumgehungen, um eine Erkennung zu vermeiden.

30
bstpierre

Mit der Überprüfung des lokalen HTML 5-Speichers können Sie den privaten Browsermodus jetzt (2019) zuverlässig erkennen. Es funktioniert, indem versucht wird, "Local Storage" zu schreiben und dann zu lesen.

sehen:

https://Gist.github.com/jherax/a81c8c132d09cc354a0e2cb911841ff1

oder

https://github.com/jLynx/PrivateWindowCheck mit PoC

  ------ edit to add functional description ----

Über den obigen Jherax-Link:

...
    // **Firefox**
    if ('MozAppearance' in document.documentElement.style) {
      if (indexedDB === null) return yes();
      const db = **indexedDB.open**('test');
      db.onerror = yes;
      db.onsuccess = not;
      return void 0;
---

Von jLynx oben

...
        } else if(navigator.userAgent.includes("Firefox")){
            //Firefox
            var db = indexedDB.open("test");
            db.onerror = function(){resolve(true);};
            db.onsuccess =function(){resolve(false);};
---

In beiden Beispielen zeigt der Fehler beim Öffnen des persistenten lokalen Speichers indexDB für Firefox (definiert durch HTML 5) an privates Surfen. Andere Browser rufen den lokalen Speicher unter anderen Namen auf, z. B. localStorage.

10
user10216038

Sie können Heuristiken verwenden, um eine solide Vermutung anzustellen. In IE10 und IE11 (und Safari, IIRC) werden beispielsweise Ausnahmen ausgelöst, wenn versucht wird, IndexedDB als starken Hinweis darauf zu verwenden, dass sich der Browser im InPrivate-Modus befindet.

In ähnlicher Weise zeigt das DRM-System von Adobe (das anscheinend von HBOGO verwendet wird) einen Fehlercode an, wenn der Browser InPrivate/Incognito ist, da erforderliche "Lizenzartefakte" im privaten Modus nicht erstellt werden dürfen. https://forums.Adobe.com/thread/1189199

8
EricLaw

Ich sehe, es gibt ein Kopfgeld, weil Sie eine präzisere und aktuellere Antwort wünschen, aber die Wahrheit ist, dass die richtige Antwort bereits von anderen gegeben wurde. Ich kann Ihnen nur ein paar Details geben, obwohl ich kein JS-Entwickler bin und auch nie gewusst habe, wie dieses Zeug funktioniert.

Die kurze Antwort lautet: Sie verwenden JavaScript, um eine Art Heuristik zu implementieren, die hauptsächlich prüft, ob bestimmte Funktionen verfügbar sind oder nicht.

Schauen Sie sich zum Beispiel bostonglobe.com An. Klicken Sie im privaten Modus auf einen Artikel und Sie sehen den Hinweis: "Sie befinden sich im privaten Modus usw.". Wenn Sie das JavaScript deaktivieren, wird dieser Hinweis nicht angezeigt. Dies bedeutet, dass dies in JS erfolgt. Das gleiche gilt, wenn Sie zur New York Times gehen, es ist nur JS. Aber wie machen sie das genau? Bei bostonglobe.com Habe ich den Code in einer JS-Datei mit dem Namen meter.js In der Quelle gefunden. Wenn Sie in diesem Code nach detectPrivateMode suchen, sehen Sie die verwendete Funktion. Es ist minimiert, also ist es ein Schmerz zu lesen. Wenn Sie die Quelle in den Entwicklertools des Browsers verschönern, erhalten Sie jedoch den folgenden Code:

detectPrivateMode: function (t) {
  var e;
  if (window.webkitRequestFileSystem) window.webkitRequestFileSystem(window.TEMPORARY, 1, function () {
    e = !1
  }, function (t) {
    console.log(t),
    e = !0
  });
   else if (window.indexedDB && /Firefox/.test(window.navigator.userAgent)) {
    var i;
    try {
      i = window.indexedDB.open('test')
    } catch (t) {
      e = !0
    }
    void 0 === e && n(function () {
      return 'done' === i.readyState
    }, function (t) {
      t || (e = !i.result)
    })
  } else if (r(window.navigator.userAgent)) {
    e = !1;
    try {
      window.indexedDB || (e = !0)
    } catch (t) {
      e = !0
    }
  } else if (window.localStorage && /Safari/.test(window.navigator.userAgent)) {
    if (window.safariIncognito) e = !0;
     else {
      try {
        window.openDatabase(null, null, null, null)
      } catch (t) {
        e = !0
      }
      try {
        window.localStorage.setItem('test', 1)
      } catch (t) {
        e = !0
      }
    }
    void 0 === e && (e = !1, window.localStorage.removeItem('test'))
  }
  n(function () {
    return void 0 !== e
  }, function (n) {
    t(e)
  })
}

Sie können zum Beispiel sehen, dass sie versuchen, window.webkitRequestFileSystem Zu verwenden, in Firefox versuchen sie window.indexedDB.open('test'), in Safary window.openDatabase Und so weiter. Alle diese Funktionen scheinen auf der Tatsache zu beruhen, dass sie sich im privaten Modus (Inkognito-Modus) unterschiedlich verhalten. Der größte Teil des Codes scheint Funktionen zu verwenden, die sich auf den lokalen Speicher beziehen und sich anscheinend anders verhalten als im normalen Modus. Es gibt mehrere Try-Catch-Blöcke, sodass die meisten dieser Funktionen wahrscheinlich nicht einmal im privaten Modus verfügbar sind. Wenn Sie eine dieser Funktionen googeln (möglicherweise auch "privat" oder "inkognito" in die Suche einfügen), werden Sie viele Ergebnisse finden, die die möglichen Möglichkeiten zur Erkennung des privaten Modus diskutieren, und am Ende wird der Code, den Sie finden, aussehen sehr ähnlich zu dem, den ich zitiert habe. Sie finden mehrere Fragen zu StackExchange sowie Codefragmente GitHub. Diese Antwort auf StackExchange enthält beispielsweise einige interessante Informationen: https://stackoverflow.com/a/4132218

Wenn Sie in der New York Times auf einen Artikel klicken, die HTML-Quelle öffnen und nach webkitRequestFileSystem suchen, finden Sie ähnlichen Code.

Wie Sie sehen können, gibt es möglicherweise einige Unterschiede im Code und in den verwendeten Heuristiken, aber jede Website erkennt wahrscheinlich den privaten Modus, indem sie sich auf denselben kleinen Satz von Funktionen stützt.

6
reed

Anscheinend gibt es einige Möglichkeiten, die Websites erkennen können, wenn Sie sich im privaten Browsermodus befinden: für Desktop-Safari und mobile Safari .

Desktop Safari fordert im privaten Browsermodus keine Favoriten an, wodurch Dinge verraten werden. Es hat auch andere Unterschiede .

Mobile Safari unterstützt keinen lokalen HTML5-Speicher im privaten Browsermodus, der auch von Websites erkannt werden kann.

3
D.W.

Ab März 2020 scheint es für Websites immer noch möglich zu sein, zu erkennen, ob Firefox im privaten Modus ausgeführt wird oder nicht, da IndexedDB nicht funktioniert, wenn Firefox im privaten Modus ausgeführt wird. Es gibt eine Reihe von Mainstream-Medien, die diese Technik zu verwenden scheinen, um Benutzer daran zu hindern, ihre Website im privaten Modus zu durchsuchen oder sie zur Anmeldung zu zwingen.

GitHub Gist mit Beispielcode:
https://Gist.github.com/jherax/a81c8c132d09cc354a0e2cb911841ff1

Arbeitsdemo des obigen Codes:
https://output.jsbin.com/tazuwif

Bugzilla-Threads mit mehr Infos:
https://bugzilla.mozilla.org/show_bug.cgi?id=781982
https://bugzilla.mozilla.org/show_bug.cgi?id=150668

1
mti2935

Die einfache Antwort lautet nein.

Das einfache Erkennen, dass der Verlauf nicht gespeichert wird, bedeutet nicht, dass der private Browsermodus verwendet wird. Es bedeutet lediglich, dass der Verlauf nicht gespeichert wird. Dies ist in jedem Browser einfach zu konfigurieren.

Warum bedeutet die Anmeldung bei einem anderen Dienst, dass Sie den privaten Browsermodus nicht verwenden? Ich benutze Facebook oft im privaten Browsermodus auf Computern anderer Leute, da ich sie nicht abmelden muss und es eine einfache Möglichkeit ist, meine eigene Sitzung zu haben, ohne ihren Status zu verlieren.

Der private Browsermodus aktiviert einfach Funktionen, die Sie im normalen Modus für sich selbst konfigurieren können. Zur Vereinfachung werden mehrere Funktionen gleichzeitig für einen vorübergehenden Zeitraum aktiviert. Es gibt keine Möglichkeit festzustellen, ob jemand den privaten Browsermodus verwendet oder ob diese Funktionen einfach aktiviert sind.

0
Sonny Ordell