3 points par GN⁺ 2023-09-07 | 1 commentaires | Partager sur WhatsApp
  • Un mode d’hébergement où tous les fichiers d’un site web sont compressés en ZIP puis encodés en Base64 avant d’être ajoutés après le domaine, de sorte que l’adresse elle-même devienne un site web complet
  • Une architecture qui permet de transmettre un site simplement en partageant son adresse, sans téléverser de fichiers séparés ni les stocker sur un serveur
  • La compression ZIP, l’encodage Base64 et la génération de l’URL se font en une seule ligne de commande, avec aussi la prise en charge du glisser-déposer d’un fichier ZIP en l’absence de ligne de commande
  • Le serveur ne conserve le contenu qu’en RAM pendant 15 minutes avant de le supprimer, et il ne le retraite que lorsque le même lien est rouvert
  • Fait partie du projet de serveur web Lwan, c’est open source, et il est même possible d’imprimer puis de scanner via un QR code

Concept de smolsite

  • L’intégralité du site est incluse dans l’URL, si bien qu’en partageant l’adresse, on transmet aussi le site lui-même
  • Comme dans l’exemple composé de deux fichiers (index.html, mylogo.png), on peut regrouper plusieurs fichiers et les convertir en une seule adresse

Comment créer un smolsite

  • Compresser tous les fichiers en archive ZIP, les encoder en Base64, puis ajouter le résultat à la suite de https://smolsite.zip/
    • Exemple de commande :

FAQ

  • Sans ligne de commande

    • Il suffit de faire glisser le fichier ZIP sur la barre violette en bas de page pour le partager
  • Peut-on l’héberger sur papier ?

    • Oui, et en cliquant sur le QR code, on peut voir une version imprimable et scannable
  • Est-ce open source ?

  • Comment le ZIP est-il traité côté serveur ?

    • Le contenu est traité par le serveur et conservé en RAM pendant 15 minutes, puis supprimé
    • En revanche, si quelqu’un rouvre le même lien, il est retraité
  • Protection contre les ZIP bombs

    • Les données déflatées sont envoyées telles quelles au navigateur sans modification, et comme il n’y a pas de décompression récursive, cela offre une certaine protection
  • Peut-on télécharger ou supprimer le contenu ?

    • smolsite essaie autant que possible d’empêcher le partage de l’URL exacte, mais comme le contenu se trouve dans l’URL, une suppression complète est impossible
      • Toute personne disposant du lien peut extraire le contenu même sans smolsite

1 commentaires

 
GN⁺ 2023-09-07
Avis de Hacker News
  • Génial
    https://smolsite.zip/UEsDBBQAAgAIAFtLJ1daaE7RlwIAAN4EAAAKAAA...
    • Génial. Du coup, on peut même faire en sorte que TinyURL héberge un site web
      https://tinyurl.com/dmk9e4m2
    • J’ai essayé de faire un QR code avec ce lien, et ce n’était vraiment rien de spécial. C’est chouette de pouvoir héberger un site web dans un QR code
  • Pour ceux qui ne le sauraient pas, on peut faire la même chose avec une data URI
    data:text/html,My%20small%20website
    Look,%20it's%20real!
    Si on veut, on peut aussi l’encoder en base64 avec un générateur de data URI. L’avantage de smolsite, c’est qu’avec un zip on peut mettre un peu plus de contenu qu’avec une data URI, et que certaines API JavaScript fonctionnent avec une URL smolsite mais pas avec une data URI
    • Avec cette technique, on peut faire un simple bloc-notes
      data:text/html,
      Je l’ai mis dans ma barre de favoris et je l’utilise comme ça
    • Je le note avant que quelqu’un ne crée un smolsite qui installe un service worker sur ce domaine et envoie les données d’analyse de tous les autres smolsites vers son propre serveur
    • J’utilise Base64 + gzip pour stocker environ 5 Ko de texte dans un seul tweet : https://sonnet.io/projects#:~:text=Laconic!%20(a%20Twitter%2...
    • Pour le meilleur ou pour le pire, les navigateurs web et les raccourcisseurs d’URL bloquent l’ouverture et la redirection des data URL, donc c’est surtout utile pour les favoris du navigateur
      [1] https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_...
  • Dans le thème des choses étranges à mettre dans une URL, il y a aussi le chien représenté par un nombre premier : https://geonnave.github.io/primg/#17976931348623159077293051...
    • C’est impressionnant. Rien que le fait d’avoir pensé à représenter une image par la représentation binaire d’un nombre premier est remarquable
  • Ma réponse est aussi dans l’URL
    https://wgx.github.io/anypage/?eyJoMSI6IkhlbGxvIEhOISIsImgyI...
  • Sympa. Ça me rappelle nopaste, un pastebin qui stocke le texte dans l’URL après l’avoir compressé en LZMA et encodé en base64
    [0] https://nopaste.boris.sh/
  • Cette méthode envoie le contenu au serveur pour le décompresser. Une version un peu plus complexe consisterait à mettre le zip dans la partie ancre et à faire en sorte que la réponse fournisse le code qui le décompresse côté client

Cela dit, comme la partie ancre n’est pas envoyée au serveur, celui-ci ne peut pas inspecter le contenu nuisible transmis par ce biais, même s’il le voulait.

  • J’ai eu la même réflexion. Avec un serveur de contenu statique qui utilise un glob de routage envoyant tout le trafic vers la même page web, c’est possible même sans ancre. Cela rend vraiment l’hébergement très simple.
  • C’est vraiment le genre de chose qui est géniale, et c’est ainsi que Show HN devrait être à l’origine, plutôt qu’un outil marketing permettant à d’autres organisations de pousser leurs produits.
    • Ce genre de choses est bien aussi, mais il faut aussi tenir compte du fait que Y Combinator est un incubateur de startups. Il me semble normal, dans une certaine mesure, d’encourager les gens à montrer leurs produits.
    • Je ne vois pas ça comme de la publicité. Beaucoup de gens viennent sur Hacker News pour voir ce que construisent les hackers, et c’est aussi pour ça que je viens.
      Tous les posts Show HN que j’ai vus jusqu’ici ont été intéressants, et ils m’ont motivé à lancer aussi mon projet et à le peaufiner pour pouvoir le montrer ici. C’est vraiment agréable quand quelqu’un d’autre soumet votre travail et qu’on peut en discuter là-bas.
    • Tu as l’impression que les Show HN plus originaux sont éclipsés par les posts à caractère corporate ?
    • C’est pour ça que les Show HN intéressants reçoivent des upvotes.
  • J’avais déjà eu l’idée d’implémenter la Bibliothèque de Babel de Borges de cette façon. Mettre tout le texte dans l’URL, optimiser les mots anglais avec un encodage plus sophistiqué, puis y ajouter un système de recherche permettant de trouver son nom, des fragments de texte, etc.
    Bien sûr, on finirait par buter sur la limite de longueur des URL, mais on pourrait ajouter une couche où un curateur assemble des lots d’URL pour créer des textes plus grands. On pourrait aussi ajouter un peu de magie LLM pour générer ces lots, et on obtiendrait alors une bibliothèque contenant non seulement tous les livres déjà écrits, mais aussi tous ceux qui pourraient l’être.
    Bien sûr, c’est une blague. Je sais que c’est un peu comme dire que le Bloc-notes contient déjà tous les livres existants, et qu’il suffit simplement de les taper soi-même.
  • Voici des travaux similaires publiés auparavant.
    https://news.ycombinator.com/item?id=34312546
    https://news.ycombinator.com/item?id=2464213
    • Le commentaire du premier lien disant que Yahoo mettait un énorme objet JSON encodé en base64 dans l’URL me rappelle une horreur que j’ai commise dans un ancien boulot.
      Pour éviter de payer à notre prestataire web le module de calendrier d’événements hors de prix, j’avais codé une page publique qui construisait un calendrier à partir d’un schéma JSON d’événements simple, encodé en base64 dans un attribut data-events. Les employés utilisaient une page privée qui récupérait les données d’événements existantes de la page publique pour préremplir un générateur de calendrier ; ils les modifiaient, puis extrayaient un nouveau bout de code à coller dans la page publique.
      En gros, ça fonctionnait bien, mais je crois qu’on a fini par simplement payer l’add-on de calendrier.
    • Je ne retrouve pas le lien HN pour l’instant, mais voici un projet Twitter CDN que j’avais publié il y a quelques années. C’est basé sur des data URI en base64+gzip.
      https://sonnet.io/projects#:~:text=Laconic!%20(a%20Twitter%2...
  • C’est drôle, mais il pourrait aussi y avoir des usages pratiques. Les hackers doivent quand même faire attention.
    • J’ai immédiatement pensé que ce serait un excellent moyen d’envoyer une charge utile malveillante à une cible qui ne s’y attend pas. Un bon WAF le bloquerait probablement comme suspect, mais j’imagine qu’on pourrait le contourner avec quelques astuces.