Come ospitare una pagina Web in un semplice URL

Sapete che è possibile nascondere intere pagine Web, elementi grafici e note testuali all'interno di normali URL utilizzando la compressione Zip e la rappresentazione Base64?

Immaginate una pagina Web che non è memorizzata in locale, che non è ospitata su un server remoto ma che si apre semplicemente cliccando su un link o incollando un URL nella barra degli indirizzi. Com’è possibile ospitare una pagina Web in un semplice indirizzo?

Provate a visitare questa pagina: a una prima occhiata sembra (e lo è davvero…) una pagina HTML spartana. C’è un semplice foglio di stile, un titolo, qualche paragrafo e del codice preformattato.

Guardate però la struttura dell’URL: a destra del nome del dominio appare una lunghissima stringa alfanumerica. Quella stringa è una rappresentazione Base64 del contenuto di un archivio Zip compresso. All’interno del file Zip sono ospitati tutti gli elementi della pagina Web. Quando qualcuno visita l’URL in questione, il server decodifica la stringa Base64 e decomprime i dati compressi visualizzando la pagina HTML.

Creare un URL che visualizza una pagina Web contenuta all’interno dell’indirizzo stesso

L’autore dell’inusuale progetto spiega infatti che per creare un URL personalizzato, come quello presentato in precedenza, basta impartire i seguenti due comandi nella finestra del terminale Linux oppure in WSL (Windows Subsystem for Linux), con Windows 10 o Windows 11:

zip -DXjq9 somesite.zip index.html mylogo.png
echo "https://smolsite.zip/`cat somesite.zip | base64 --wrap 0`"

La prima istruzione crea un file ZIP chiamato somesite.zip.

  • -D abilita l’opzione “no directory entries” per impedire l’inclusione dei nomi delle directory nel file Zip. In altre parole, i file sono inclusi nel file Zip senza prendere in considerazione la struttura delle cartelle.
  • -X attiva l’opzione “eXclude eXtra file attributes” per evitare di includere attributi extra dei file nell’archivio compresso.
  • -j abilita l’opzione “junk the path” per ignorare i percorsi dei file originali e includere solo i nomi dei file nel file Zip.
  • -q9 specifica il livello di compressione (1-9), dove 9 è il massimo livello di compressione.

Il secondo comando, invece, mostra un URL contenente la stringa Base64 corrispondente al contenuto del file Zip creato in precedenza (cat somesite.zip | base64 --wrap 0).

Come si vede, dentro al file Zip si inseriscono, nell’esempio, due file: index.html e mylogo.png che formano la pagina Web da visualizzare all’utente.

Quanto realizzato è piuttosto curioso ma non è propriamente una novità: l’applicazione Topaz Paste ospitata su GitHub permetteva già da anni qualcosa di molto simile. In questo caso, anziché una pagina Web, venivano memorizzate delle note testuali in stile Pastebin ma il concetto e la realizzazione sono identici. Anche NoPaste ha un approccio totalmente sovrapponibile.

Cos’è la rappresentazione Base64

La rappresentazione Base64 è un metodo per trasformare dati binari in una forma leggibile basata su testo. Questo processo coinvolge la suddivisione dei dati binari in piccoli blocchi e la loro successiva conversione in caratteri ASCII.

Il set di caratteri ASCII è scelto attingendo a lettere maiuscole, minuscole, numeri e alcuni simboli. Ogni blocco di dati binari produce una sequenza di quattro caratteri ASCII. In alcuni casi, se il numero di byte da codificare non è un multiplo di 3, viene aggiunto un carattere di riempimento alla fine per garantire che la rappresentazione abbia una lunghezza corretta.

Il risultato è una sequenza di caratteri che rappresenta il dato binario originale. Questa rappresentazione può essere utilizzata per esprimere dati binari in modo leggibile e trasmetterli attraverso metodi di comunicazione basati su testo, come URL, testo nei messaggi di posta elettronica e altro ancora.

Senza un URL vero e proprio e senza scomodare server Web remoti

Non è finita qui. Provate a copiare e a incollare nella barra degli indirizzi del browser quanto segue:

data:text/html,<h1>Sito%20Web%20di%20prova</h1><p>Guarda%20come%20appare%20la%20pagina!</p>

Questo esempio non utilizza alcun tipo di codifica: il sorgente HTML è chiaramente leggibile. Con data:text/html si istruisce il browser sul tipo di dati col quale ha a che fare. In questo caso i dati HTML sono mostrati direttamente, senza passare per alcun server Web remoto.

In realtà, sarebbe possibile passare nella barra degli indirizzi del browser anche la versione codificata in Base64:

data:text/html;base64,PGgxPlNpdG8gV2ViPC9oMT48cD5HdWFyZGEgY29tZSBhcHBhcmUgbGEgcGFnaW5hITwvcD4=

Copiando, incollando e premendo Invio, guardate cosa appare e premete la combinazione di tasti CTRL+U per accedere al sorgente della pagina Web. Simpatico no?

Credit immagine in apertura: iStock.com/Dilok Klaisataporn

Ti consigliamo anche

Link copiato negli appunti