26 points par GN⁺ 2023-11-26 | 6 commentaires | Partager sur WhatsApp
  • Sqids est une bibliothèque open source qui génère des ID de style YouTube à partir de nombres
  • Les ID générés sont courts, peuvent être créés avec un alphabet personnalisé et sont garantis sans collision
  • L’exemple d’ID fourni prend la forme https://example.com/Lqj8a0

Pourquoi utiliser Sqids

  • L’objectif principal de Sqids est d’ordre visuel
  • Si vous souhaitez utiliser des ID à la place de nombres dans une web app, Sqids peut être un bon choix
  • Parmi les cas d’usage : raccourcissement de liens, utilisation sûre dans les URL, ID d’événements, encodage/décodage sans collision et mots de passe à usage unique
  • Il n’est pas adapté aux données sensibles et, utilisé comme ID utilisateur, il peut révéler le nombre d’utilisateurs

Caractéristiques de Sqids

  • Permet de générer des ID courts à partir de nombres non négatifs
  • Encodage et décodage faciles
  • Les ID générés automatiquement n’incluent pas d’insultes courantes
  • Prend en charge le mélange de l’alphabet pour des ID personnalisés
  • Prend en charge 40 langages de programmation, dont 15 utilisant le nouveau design
  • Génère les mêmes ID sur toutes les versions
  • Taille de bibliothèque réduite et licence permissive

Avis de GN⁺

  • La bibliothèque Sqids est utile pour les développeurs qui veulent utiliser des ID courts et sans collision à la place de nombres dans une web app
  • Cette bibliothèque fournit des ID visuellement attractifs et reste très accessible grâce à la prise en charge de nombreux langages de programmation
  • Elle offre des opportunités intéressantes aux développeurs open source et protège les droits d’auteur grâce à la licence MIT

6 commentaires

 
haebom 2023-11-27

Pratique pour empêcher le scraping.

 
stardust33 2023-11-30

Pourriez-vous expliquer un peu plus comment son utilisation permet d’empêcher le crawling ?

 
ragus 2023-12-02

Si l’URL est simplement de la forme posts/1, posts/2, posts/3, les crawlers essaient généralement d’y injecter 1,2,3,4,5... pour les parcourir.
En revanche, si l’URL est de la forme posts/L12Qsd, posts/dei24A, ils ne peuvent pas le faire, donc j’imagine que c’est pour ça.

 
stardust33 2023-12-05

Ah ! Merci pour votre réponse.

 
jaypark 2023-11-27

Je me demandais quelle était la différence avec hashids, alors j’ai cherché : si on saisit https://hashids.org, on est redirigé vers https://sqids.org/. On dirait qu’ils ont changé de nom.

https://sqids.org/faq#hashids

 
GN⁺ 2023-11-26
Avis sur Hacker News
  • Possibilité d’obtenir des insights business à partir d’entreprises qui utilisent des ID séquentiels

    • Par exemple, il est possible d’estimer le taux de croissance d’une entreprise via l’ID attribué lors de l’inscription
    • Applicable à tous les types de ressources dans une application
    • On peut se demander à quel point les « valeurs poubelles » dans la barre d’URL sont importantes aujourd’hui
    • Comme la plupart des navigateurs masquent désormais l’essentiel de l’URL, certains utilisent uulids en attendant une adoption plus large de UUID v7
    • Le composant temporel intégré est parfois utile (par ex. pour les règles de fusion d’objets)
  • Doute sur la mention des codes d’accès à usage unique

    • Un code d’accès doit être imprévisible, mais pas nécessairement unique
    • Cela fonctionne si l’on fournit une source aléatoire appropriée, mais l’aspect « rempli de valeurs poubelles » paraît plus complexe qu’il ne l’est réellement
    • 4 à 8 chiffres aléatoires fonctionnent bien et donnent un niveau de sécurité clair
    • Les chiffres sont plus faciles à comprendre que les lettres latines sensibles à la casse, surtout pour les utilisateurs de langues utilisant d’autres systèmes d’écriture
  • Déception de ne pas pouvoir formater des entiers 128 bits ou des tableaux d’octets

    • Cela permettrait de formater des UUID
    • Faible préférence pour l’utilisation d’ID entiers publics
    • Les ID croissants risquent de divulguer des informations importantes
    • Préférence pour raccourcir les UUID en les formatant en Base64URL pour les URL, QR codes, etc.
  • Dans les applications Ruby, utilisation d’une méthode de conversion vers une base élevée

    • Sqid fournit une bibliothèque Ruby et permet de configurer une base bien plus élevée, y compris avec des lettres majuscules et des emojis
    • Il faut des nombres bien plus grands avant que l’économie d’espace fasse une vraie différence
    • Difficile de savoir si cela vaut la peine d’ajouter une nouvelle dépendance
  • Le filtrage des grossièretés peut être une contrainte de conception

    • Il faut conserver immuable la liste des mots interdits pour préserver l’encodage
    • Sinon, d’anciens sqids pourraient être décodés de manière incorrecte
  • Préférence pour l’utilisation de nanoid et d’un dictionnaire de caractères sûr

    • Suggestion d’utiliser une approche par dictionnaire similaire plutôt qu’une implémentation codée en dur pour repérer les « mauvais » mots
    • Intérêt exprimé pour la suite de tests de performance
    • Dans la plupart des langages, la génération de UUID v4 est optimisée, d’où la question de savoir si une solution personnalisée est réellement meilleure
  • Discussion sur l’utilisation de chaînes générées aléatoirement

    • Utilisées pour les ID, les tokens de récupération de mot de passe, etc.
    • Des millions ont été générés, et des centaines de milliers de personnes les vérifient chaque jour
    • Aucun cas de plainte concernant des ID de contenu aléatoires
    • La société moderne a tellement peur d’offenser quelqu’un que le filtrage des grossièretés s’étend jusqu’aux ID de base de données et aux tokens de récupération de mot de passe
    • Si la longueur minimale est fixée à 8, la probabilité qu’une grossièreté apparaisse comme mot complet dans tout l’ID est faible
  • Confusion face à la présence, dans la section "Get Started", de liens vers 40 langages

    • Sur ces 40, seuls 15 permettent réellement de commencer, les 25 autres étant des dépôts squelettes demandant aux gens de mettre une étoile au dépôt pour montrer leur intérêt
  • Question sur la manière d’ajuster ou de faire évoluer la blocklist

    • Si un ID figure dans la blacklist, on l’incrémente simplement
    • Les ID sont figés par le contenu de la blacklist, et la modifier invalide certains segments d’ID générés auparavant
  • Dans ce fil, beaucoup disent que c’est un bon moyen de masquer les insights tirés des ID/nombres

    • Comme les valeurs générées peuvent être facilement décodées, certains se demandent s’il ne suffirait pas de décoder quelques nombres pour en tirer malgré tout des insights