Aller au contenu
FlashScan Pro

Scanner un QR code en ligne, sans rien envoyer sur un serveur

Le décodage se fait dans votre navigateur : ni l’image ni le contenu ne partent. Comment vérifier qu’un scanner en ligne est vraiment local.

« Scanner en ligne » ne devrait pas vouloir dire « envoyer en ligne »

Cherchez « scanner QR code en ligne » et les premiers résultats proposent tous la même chose : déposez votre image ou autorisez la caméra. Ce que ces pages précisent rarement, c’est où le décodage a lieu. Historiquement, beaucoup envoyaient l’image à un serveur qui la décodait et renvoyait le résultat — pratique en 2012, injustifiable aujourd’hui : les navigateurs savent décoder un QR code seuls.

FlashScan Pro a été construit sur ce constat : tout le traitement — scan caméra, décodage d’image, génération, historique — s’exécute dans le navigateur. Cet article donne la méthode pour vérifier cette affirmation vous-même, ici ou sur n’importe quel outil concurrent.

Comment ça marche sous le capot

Deux décodeurs se relaient, tous deux côté client :

  • BarcodeDetector : l’API native du navigateur (Chrome, Edge, Android). Elle décode les trames caméra et les images importées sans quitter l’appareil.
  • ZXing : quand BarcodeDetector est absent (Firefox, Safari ancien), le décodeur open source se charge dans la page et analyse les pixels en JavaScript — toujours en local.

Dans les deux cas, le résultat s’affiche en clair à l’écran avant toute action : vous lisez le contenu, puis vous décidez de l’ouvrir ou de le copier. Votre historique de scans est stocké dans le localStorage du navigateur (500 entrées maximum) — sur votre appareil, nulle part ailleurs.

La vérification en trois tests — reproductible

Test 1 : l’onglet Réseau

  1. Ouvrez les outils de développement (F12 sur desktop), onglet Réseau.
  2. Filtrez sur Fetch/XHR pour masquer le bruit.
  3. Lancez un scan caméra ou importez une image.

Avec un scanner local, aucune requête ne part pendant le décodage. Si vous voyez un POST vers un domaine distant au moment du scan, l’image ou le contenu voyage.

Une nuance d’honnêteté : l’onglet Réseau peut afficher des requêtes publicitaires si vous avez consenti aux annonces — elles financent l’application mais ne transportent ni votre image ni le contenu du code. Ce qui compte, c’est qu’aucune requête ne part au moment du scan avec le fichier ou le payload.

Test 2 : le mode avion

Chargez la page, coupez toute connexion (mode avion), puis scannez. Si le décodage fonctionne toujours — chez nous, il fonctionne — le traitement est local par construction : impossible d’envoyer ce qu’on ne peut pas atteindre. C’est le test le plus simple et le plus convaincant, aucun outil de développement requis.

Test 3 : l’inspecteur de stockage

Dans les outils de développement, onglet Application (Chrome) ou Stockage (Firefox), regardez localStorage : vous y verrez vos entrées d’historique — preuve qu’elles vivent dans votre navigateur. Effacez le stockage du site : l’historique disparaît avec, définitivement, puisqu’il n’existe nulle part ailleurs.

Ce qui passe quand même par le réseau

Le scan est local, mais la session ne l’est pas entièrement — distinguons les flux :

  • Le chargement de la page : HTML, scripts et images transitent forcément par le réseau, une fois, au départ. C’est le prix d’un outil « en ligne » — l’installation en PWA réduit ensuite ce flux au minimum.
  • Les annonces : si vous avez consenti, les scripts publicitaires chargent leurs propres ressources. Ils ne voient ni le fichier importé ni le contenu décodé, qui restent en mémoire locale.
  • Ce que vous ouvrez après coup : suivre un lien décodé est une navigation normale, visible du réseau et du site cible.

Ce que le local ne protège pas — honnêteté oblige

Le décodage local garantit que le scan ne fuit rien. Il ne dit rien sur ce qui se passe après : si le code contient une URL et que vous l’ouvrez, cette navigation part sur le réseau comme n’importe quelle visite — le site cible vous voit. Le local protège le contenu du code jusqu’à votre décision ; ensuite, les règles habituelles du web s’appliquent (voir reconnaître un QR code piégé).

De même, « local » signifie « sur cet appareil » : votre historique ne vous suit pas d’un téléphone à l’autre — c’est le revers de l’absence de compte et de synchronisation.

La checklist pour auditer n’importe quel scanner en ligne

  • Le décodage fonctionne-t-il en mode avion ?
  • L’onglet Réseau reste-t-il silencieux pendant le scan ?
  • L’outil demande-t-il un compte ou un envoi de fichier vers un domaine API ?
  • Où vit l’historique — localStorage local ou serveur distant ?
  • Le contenu décodé s’affiche-t-il avant d’être ouvert ?

Si un « scanner en ligne » échoue à la première question, ce n’est pas un scanner en ligne : c’est un formulaire d’upload déguisé.