>_ DevTrendsit

Lingua

Home

Linguaggi

Sezioni

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embedded Sicurezza
TypeScript

Come identificare un utente senza cookie e registrazione

Immagina una situazione: un utente visita il tuo sito in modalità incognito, cancella la cache, cambia IP tramite proxy, ma tu hai comunque bisogno di capire che è la stessa persona. Perché? Ad esempio, per impedire a un attaccante di effettuare attacchi brute-force sulle password all'infinito, o per evitare di mostrare per la decima volta lo sconto di benvenuto allo stesso "nuovo" cliente.

I metodi tradizionali come LocalStorage o i Cookie falliscono qui — possono essere cancellati con un solo clic. È esattamente il problema che FingerprintJS risolve. È una libreria che raccoglie decine di segnali indiretti del browser e del dispositivo per creare un identificatore univoco del visitatore.

Logo FingerprintJS

Cos'è e come funziona

FingerprintJS è uno strumento open-source per il browser fingerprinting. In parole semplici, la libreria interroga il browser: "Quali font hai installati? Qual è la risoluzione dello schermo? Come renderizzi la grafica attraverso Canvas?"

Singolarmente, questi dati non significano molto. Milioni di persone usano Chrome su Windows con una risoluzione di 1920x1080. Ma quando combini la versione del motore, l'elenco delle lingue disponibili, il fuso orario, i parametri dello stack audio e le caratteristiche specifiche di rendering dei font, ottieni una combinazione unica per quasi ogni dispositivo. Tutti questi dati vengono sottoposti a hash e ottieni una stringa breve — visitorId.

Come configurare rapidamente un progetto

L'integrazione è estremamente user-friendly per gli sviluppatori. Puoi installare tramite npm:

npm install @fingerprintjs/fingerprintjs

E avviare con poche righe di codice:

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()

Se non vuoi occuparti dei bundler, la libreria è disponibile tramite CDN. Ma c'è un problema: alcuni ad blocker aggressivi o browser come Brave potrebbero bloccare il caricamento di script da domini esterni. In questi casi, gli autori consigliano di usare il pacchetto npm e bundlare il codice nel tuo bundle.

Dove sarà davvero utile

Dalla mia esperienza, questi strumenti vengono più spesso utilizzati in attività di sicurezza e analisi.

Prima di tutto, la prevenzione delle frodi. Se qualcuno tenta di registrare 50 account per aumentare i bonus di referral, FingerprintJS evidenzierà che tutte queste "diverse" persone si trovano dietro lo stesso laptop.

In secondo luogo, la limitazione dell'accesso. Puoi limitare il numero di visualizzazioni gratuite dei contenuti (come fanno i grandi editori) senza obbligare l'utente a effettuare il login.

Terzo, la protezione contro gli attacchi brute-force sulle password. Se i tentativi di login da un dispositivo usano nomi utente diversi, è un motivo per bloccare l'accesso per quello specifico "fingerprint" senza influenzare altri utenti sullo stesso IP (ad esempio, in un edificio per uffici).

Cosa dovresti sapere in anticipo

La libreria è ottima, ma non è una "bomba magica". La versione open-source ha le sue limitazioni, che gli sviluppatori scrivono onestamente nel README.

La precisione della versione gratuita è inferiore rispetto al loro prodotto cloud commerciale. Poiché tutti i calcoli avvengono lato client, un utente avanzato può falsificare alcuni parametri del browser per cambiare il proprio ID.

Inoltre, se un utente aggiorna il browser o il sistema operativo, il suo fingerprint probabilmente cambierà. Non è un identificatore permanente, ma piuttosto un marcatore temporaneo molto affidabile.

FingerprintJS è un'ottima scelta se hai bisogno di aggiungere un livello di sicurezza o analisi di base senza usare i cookie. Il progetto è attivo, ha una enorme community (quasi 28mila stelle su GitHub) e una documentazione chiara.

È adatto a te? Se l'obiettivo è filtrare il 90% dei bot e dei truffatori dilettanti, allora sicuramente sì. Per i sistemi bancari con requisiti di sicurezza critici, potresti dover guardare le loro soluzioni a pagamento con validazione lato server, ma per la maggior parte dei progetti web, le capacità della versione MIT sono più che sufficienti.

Puoi provare la libreria in azione sulla loro pagina demo — aprila in modalità normale, poi in incognito, e vedrai che la magia funziona.

Progetti correlati