>_ DevTrendsnl

Taal

Home

Talen

Secties

Frontend Backend Mobiel DevOps AI / ML GameDev Blockchain Embedded Beveiliging
TypeScript

Hoe een gebruiker identificeren zonder cookies en registratie

Stel je een situatie voor: een gebruiker bezoekt je site in incognitomodus, wist de cache, verandert zijn IP via proxy, maar toch moet je erachter komen dat het dezelfde persoon is. Waarom? Bijvoorbeeld om te voorkomen dat een aanvaller eindeloos wachtwoorden kan brute-forcen of om te vermijden dat je de welkomstkorting voor de tiende keer aan dezelfde "nieuwe" klant toont.

Traditionele methoden zoals LocalStorage of Cookies schieten hier tekort — ze kunnen met één klik worden gewist. Dit is precies het probleem dat FingerprintJS oplost. Het is een bibliotheek die tientallen indirecte browser- en apparaatsignalen verzamelt om een unieke bezoekersidentifier te maken.

FingerprintJS logo

Wat is het en hoe werkt het

FingerprintJS is een open-source tool voor browser fingerprinting. Simpel gezegd, de bibliotheek bevraagt de browser: "Welke lettertypen heb je geïnstalleerd? Wat is je schermresolutie? Hoe render je graphics via Canvas?"

Individueel zegt deze data niet veel. Miljoenen mensen gebruiken Chrome op Windows met een resolutie van 1920x1080. Maar wanneer je de engineversie, de lijst met beschikbare talen, de tijdzone, de audiostackparameters en de specifieke lettertyperendering-karakteristieken combineert, krijg je een combinatie die uniek is voor vrijwel elk apparaat. Al deze data wordt gehasht, en je krijgt een korte string — visitorId.

Hoe je snel een project opzet

De integratie is uiterst ontwikkelaarsvriendelijk. Je kunt installeren via npm:

npm install @fingerprintjs/fingerprintjs

En starten met slechts een paar regels code:

import FingerprintJS from '@fingerprintjs/fingerprintjs'

async function initFingerprint() {
  // Инициализируем агент при запуске приложения
  const fpPromise = FingerprintJS.load()
  
  const fp = await fpPromise
  const result = await fp.get()

  // Вот он, наш уникальный ID
  console.log(result.visitorId)
}

initFingerprint()

Als je geen bundlers wilt gebruiken, is de bibliotheek ook beschikbaar via CDN. Maar er is een addertje onder het gras: sommige agressieve adblockers of browsers zoals Brave kunnen het laden van scripts van externe domeinen blokkeren. In zulke gevallen raden de auteurs aan om het npm-pakket te gebruiken en de code in je eigen bundle te bundelen.

Waar dit echt van pas komt

Uit mijn ervaring komen zulke tools het meest voor bij beveiligings- en analysetaken.

Ten eerste, fraudepreventie. Als iemand probeert 50 accounts te registreren om referral-bonussen te misbruiken, zal FingerprintJS erop wijzen dat al deze "verschillende" mensen achter dezelfde laptop zitten.

Ten tweede, toegangsbeperking. Je kunt het aantal gratis contentweergaves beperken (zoals grote media-outlets doen) zonder de gebruiker te dwingen om in te loggen.

Ten derde, bescherming tegen wachtwoord brute-forcen. Als inlogpogingen vanaf één apparaat verschillende gebruikersnamen gebruiken, is dat een reden om de toegang voor die specifieke "vingerafdruk" te blokkeren zonder andere gebruikers op hetzelfde IP te beïnvloeden (bijvoorbeeld in een kantoorgebouw).

Wat je van tevoren moet weten

De bibliotheek is geweldig, maar het is geen "zilveren kogel". De open-source versie heeft zijn beperkingen, die de ontwikkelaars eerlijk beschrijven in de README.

De nauwkeurigheid van de gratis versie is lager dan hun commerciële cloudproduct. Omdat alle berekeningen aan de clientzijde plaatsvinden, kan een gevorderde gebruiker sommige browserparameters spoofen om zijn ID te veranderen.

Bovendien, als een gebruiker zijn browser of besturingssysteem bijwerkt, zal zijn vingerafdruk waarschijnlijk veranderen. Het is geen permanente identifier, maar eerder een zeer betrouwbare tijdelijke marker.

FingerprintJS is een uitstekende keuze als je een beveiligingslaag of basisanalyses wilt toevoegen zonder cookies te gebruiken. Het project is actief, heeft een enorme community (bijna 28 duizend sterren op GitHub) en duidelijke documentatie.

Is het iets voor jou? Als het doel is om 90% van de bots en amateur-fraudeurs eruit te filteren, dan absoluut ja. Voor banksystemen met kritieke beveiligingseisen moet je misschien naar hun betaalde oplossingen met server-side validatie kijken, maar voor de meeste webprojecten zijn de mogelijkheden van de MIT-versie meer dan voldoende.

Je kunt de bibliotheek in actie zien op hun demopagina — open het in de normale modus, dan in incognito, en je zult zien dat de magie werkt.

Gerelateerde projecten