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?
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:
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. 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.
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:
PLAIN_TEXT
(genannt text_digest
). PLAIN_TEXT
an und erhält einen neuen package
( package
= PLAIN_TEXT
+ text_digest
) package
whole_package_digest
) 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:
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)
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.
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:
Tags und Links javascript fingerprint fingerprintjs2