Wie garantiert der Fingerabdruckwert in der Anfrage von der Clientseite nicht gefälscht wurde

8

Ein JS-Fingerabdruck wird auf der Clientseite mit einer Bibliothek wie fingerprint2 berechnet.

Meine Frage ist, wenn ich diesen Wert über Ajax sende, kann der Benutzer diesen Wert mit einem kleinen Aufwand fälschen und nur eine gefälschte Post-Anfrage machen, die von Server-Code wie legit interpretiert wird.

Meine Frage ist, wenn das passieren kann, kann diese Bibliothek einfach umgangen werden, ohne dass sie irgendeine Eigenschaft im Browser ändert (das ändert den Fingerabdruck des Browsers).

Meine Interpretation ist richtig? Wie kann ich die Integrität dieses Wertes sicherstellen?

    
anvd 03.11.2017, 11:37
quelle

2 Antworten

8

Das kannst du nicht, und ich würde mir darüber keine Sorgen machen.

Regel Nummer 1: Alle Eingaben, die vom Computer des Benutzers kommen, können gefälscht werden und sind nicht 100% ig zuverlässig.

Wenn Sie wollen, können Sie mit serverseitigem Fingerabdruck mit Bibliotheken als piwik device detector verdoppeln, um Daten zu vergleichen, aber Sie gib dir selbst Kopfschmerzen ohne Ursache.

90% der Benutzer, die Sie besuchen, haben keine Ahnung, was Sie tun, und liefern Ihnen zuverlässige Daten. Sie werden nicht einmal einen Adblock haben. Sie werden Ihnen zuverlässige Daten geben.

9% der Besucher haben möglicherweise einen Adblocker, der diese Ajax-Anfragen möglicherweise blockiert. Sie möchten, dass Sie ihre Privatsphäre respektieren, damit Sie sie als Kunden behalten. 1% könnte wissen, was diese Ajax-Anfragen tun, aber sie werden es nie herausfinden, weil sie nicht die Mühe haben, die Konsole jeder Website ihres Besuchs zu inspizieren. 1% dieser 1% könnte einen Blick auf die Browser-Konsole werfen und den Fingerabdruck des Browsers herausfinden.

1% dieser 1% dieser 1% stehlen Ihren Fingerabdruck-Code. weitere 1% der 1% der 1% werden versuchen, es nur für die Lulz zu fälschen und dann vergessen.

Kurz gesagt, mach dir keine Sorgen. die Leute werden sich auch nicht darum kümmern.

Aber wenn Sie wirklich stören müssen, und sich Kopfschmerzen geben:

  • Speichern Sie eine Benutzer-ID in Ihrer Datenbank auf dem Client-Computer in Form eines Tracking-Cookies. Speichern Sie es auch im Sitzungsspeicher, im lokalen Speicher und in allen Datenbank-Engines, die der Browser bereitstellt. (Bitte beachten Sie, dass Sie es in den Haftungsausschluss für Cookies aufnehmen müssen, warum Sie Daten auf dem Computer des Benutzers speichern, wenn europäische Benutzer Ihre Website besuchen)
  • Verwenden Sie diese Benutzer-ID, um den Fingerabdruck dem Benutzer zuzuordnen. Beachten Sie, dass diese ID jederzeit von einem Cache-Clearing-Mechaniker gelöscht werden kann (CCcleaner, Virenscanner, Benutzer, der auf eine leere Historie klickt, usw.).
  • Setzen Sie die Benutzer-ID in das Objekt window.name. Solange die Registerkarte geöffnet ist, wird sie beibehalten und versucht, sie auf dem Computer des Benutzers zurückzusetzen / zu speichern.
  • Fügen Sie Ihren Bildern einen E-TAG hinzu, der Benutzercomputer wird versuchen, das Bild mit dieser Etag-Nummer beim nächsten Mal anzufordern. Abfangen dieser Anfrage (lassen Sie den Webserver nicht damit umgehen, sondern behandeln Sie ihn in php / jsp / asp / was auch immer), damit Sie den Benutzer identifizieren können. Legen Sie eine Sitzungsvariable mit der richtigen Benutzer-ID fest und "antworten" Sie, dass das Bild unter diesem Etag-Wert noch gültig ist, und geben Sie mit Cookies die korrekte Benutzer-ID zurück
  • Geben Sie "timestamp" -Werte hinter einer Javascript-Anfrage basierend auf der Benutzer-ID ein und legen Sie die angeforderte Seite einschließlich der JavaScript-Datei so fest, dass sie innerhalb von 180 Tagen oder so abläuft. Jedes Mal, wenn der Benutzer zurückkehrt und der Benutzer seinen Verlauf nicht gelöscht hat, wird die JavaScript-Anfrage mit dem angegebenen "Zeitstempel" abgerufen. Parameter gotcha.js?time=1283737273873 Verwenden Sie erneut das serverseitige Scripting zum Abfangen. Sie können dann Ajax verwenden, um den Inhalt der Seite zu aktualisieren.
  • enthält so etwas wie Google Maps auf Ihrer Seite. Wenn sie Google Mail oder einen Google-Dienst verwenden und sie Google die Zustimmung zum Setzen von Cookies geben, wird Google seinen Browser mit Cookies vollstopfen, was für eine Weile andauern könnte. Google Maps Cookies bleiben mindestens für die Browser-Sitzung gleich und sind mit Javascript / Server-Skript lesbar.
  • Verwenden Sie den piwik device detector, um einen serverseitigen Browser-Fingerabdruck zu erstellen. Verwenden Sie ihn, um einzuschätzen, um welchen Benutzer es sich handelt.
  • kodieren Sie Ihre Anfrage als bytepuffer / stream und base64 kodieren Sie sie, um zu raten, was es schwieriger macht, selbst wenn sie base64 entschlüsseln und die Anfrage in zwei Teilen senden, einen mit Verifikationshash und einen mit dem Fingerabdruck. dann passen Sie den Hash und den Inhalt an und wenn es übereinstimmt, können Sie sicher sein, dass jemand, der getäuscht wurde, eine Menge Mühe hat.
  • Minimiere und verschleiere deinen Code, auch auf vielen sinnlosen Seitensträngen in deinem JavaScript-Code. Setzen Sie jede Zeile in ihre eigene Funktion und ketten Sie sie zu einem zusammenhängenden Ganzen zusammen. Machen Sie es zu viel Mühe, um abzuziehen, was dort vor sich geht.

Abgesehen davon kann ich Ihnen wirklich empfehlen: nicht stören. es ist die Mühe nicht wert. Menschen, die umgehen wollen, werden umgangen. Sie werden Javascript deaktivieren, dieses Skript ausschließen, alle Cookies löschen, bevor Sie fortfahren oder die Seite verlassen, registrierte Schriften-Plugins ändern usw. Jagen Sie nicht diejenigen, die nicht gejagt werden wollen. Konzentriere dich auf die Gruppe, die sich nicht darum kümmert.

    
Tschallacka 07.11.2017 12:38
quelle
4
  

Wie kann ich die Integrität dieses Wertes sicherstellen?

Um Sie kurz zu beantworten: Wenn Sie Ihre Integrität schützen möchten, müssen Sie auch den Digest der gesendeten Nachricht angeben.

Hier erkläre ich die Verteidigung der Integrität mit Alice ( FrontEnd ), Bob ( BackEnd ) und Trudy (böswilliger Benutzer)

Annahme:

Alice möchte ein Paket mit PLAIN_TEXT (hier dein Fingerabdruck ) an Bob senden, und Trudy ist die böswillige Person, die das Paket abfangen und das PLAIN_TEXT ändern möchte.

Bedrohungen gegen Integrität:

Trudy kann das PLAIN_TEXT erfassen und ändern, was immer sie will. ( In Wirklichkeit könnte es mehr Bedrohungen für die Integrität geben, aber ich möchte die Geschichte kurz halten. )

Hier sind die Schritte, die Alice ergreifen muss, um die Integrität des Pakets zu schützen:

  1. Alice erhält den Auszug von PLAIN_TEXT (genannt text_digest ).
  2. Alice hängt den Digest an den PLAIN_TEXT an und erhält einen neuen package ( package = PLAIN_TEXT + text_digest )
  3. Alice verschlüsselt die package
  4. Alice erhält den Auszug des verschlüsselten Pakets ( whole_package_digest )
  5. Alice hängt das whole_package_digest an das verschlüsselte Paket an und sendet es an Bob

Was Trudy nach der Aufnahme tun kann:

Option 1. Versuchen Sie, die Verschlüsselung des Pakets zu brechen

Option 2. Versuchen Sie, die encrypted package wegzulassen und fügen Sie ihr eigenes Paket hinzu.

Auf Bobs Seite:

  1. Er entschlüsselt die package und erhält die PLAIN_TEXT . (Er stellt sicher, dass Alice dieses Paket gesendet hat, weil niemand sonst den Schlüssel hat)

  2. Er erhält den Digest von PLAIN_TEXT mit der gleichen Methode (nennen wir obtained_digest ), und er vergleicht obtained_digest mit text_digest , und wenn sie gleich sind, heißt das Das PLAIN_TEXT wird nicht manipuliert.

  3. Am Ende erhält er den Digest des empfangenen Pakets und vergleicht es mit whole_package_digest . Wenn sie gleich sind, bedeutet das, dass Trudy mit ihrer zweiten Option gescheitert ist.

Beachten Sie, dass die Integrität im obigen Szenario stark von der Vertraulichkeit abhängt. Sie können jedoch sowohl die symmetrische als auch die asymmetrische Methode für die Verschlüsselung verwenden.

Im unteren Bild habe ich versucht zu erklären, was ich deutlicher sagen wollte:

    
Salman 13.11.2017 17:26
quelle