web-dev-qa-db-fra.com

Comment utiliser les empreintes digitales du navigateur sur mon site Web?

Je souhaite identifier les utilisateurs accédant à mon API même s'ils effacent les informations cookies ou localstorage à chaque fois que je stocke les informations de la session en cours. Je vois que browser fingerprinting est l’un des moyens d’y parvenir avec une certaine précision. Je travaille sur un projet angular2 pour le frontend. J'ai les questions suivantes:

  1. Existe-t-il des bibliothèques disponibles pour angular2 qui créent l'empreinte du navigateur? (J'ai vu ng2-device-détecteur . Cela ne donne pas beaucoup d'informations et aucune empreinte digitale hachée. Alors, dois-je le hacher moi-même?)
  2. Ont vu fingerprintjs2 cela prend beaucoup d’informations mais n’a pas d’implémentation pour angular2, mais je me demande en quoi l’empreinte digitale hachée est-elle importante? Pour une demande dans mon API, je vérifierai si la charge contient une fingerprint qui existait déjà dans l'une des sessions existantes? (Vraiment la charge utile? Ce sera simplement une demande POST. L'utilisateur peut simplement envoyer une longue chaîne aléatoire comme la valeur hachée fingerprint et l'API traitera la demande comme si elle provenait d'une autre personne.)
  3. J'imagine que je devrais alors utiliser une API qui non seulement génère un hashed fingerprint dans la frontend, mais valide également une fois que la demande a atteint l'API, quelque chose comme Google's reCaptcha. Existe-t-il des API de ce type?
  4. S'il n'y a pas d'API en tant que telle, je suppose que je devrai implémenter une telle fonctionnalité dans mon API elle-même?

S'il vous plaît écrivez vos suggestions.

15
xyz

_ {1. Il semble qu'il y ait n'est pas aucune bibliothèque (portée ou non), en particulier pour Angular2.

2. Vous n'avez pas besoin d'une version Angular2, vous devez simplement insérer le fichier source dans votre index.html et vous pourrez l'utiliser comme ceci, PLUNKER

declare var Fingerprint2: any;

@Component({
  selector: 'my-app',
  template: `Hello`,
})
export class App {
  constructor() {
    new Fingerprint2().get(function(result, components){
      console.log(result); // a hash, representing your device fingerprint
      console.log(components); // an array of FP components
    });
  }
}

Vous devez traiter ce hash comme tout autre jeton comme JWT, exclusivement ou inclusivement. Mais vous devez le stocker quelque part, comme tout autre jeton, vous pourrez ainsi vérifier son authenticité. Si un utilisateur tempère avec la demande et le hachage, JWT dispose d'un mécanisme de validation qui le rend invalide en cas de falsification, mais je suppose que le hachage par empreinte digitale ne peut pas fournir cette sécurité.

3. Non, aucun (IMK).

4. Si n ° 2 fonctionne pour vous, je suppose que vous serez bien mieux loti. 

5
Ankit Singh

Ankit a bien répondu à Angular. Voici une API qui fournit une empreinte digitale, vous n'avez donc pas besoin de l'implémenter vous-même:

API d'empreinte digitale de navigateur

Bien que cette solution ne soit pas un composant angulaire (ou ce que vous avez), vous pouvez effectuer un appel AJAX pour obtenir l’empreinte digitale et la soumettre à votre serveur.

Divulgation complète: Je suis le développeur de ce service.

1
B Seven