Questi script hanno lo scopo di spiegare come nascondere l’HTML e/o lo javascript da altre persone che visualizzano il codice sorgente della tua pagina. Non è infallibile, ma rende più difficile da leggere e capire il codice sorgente. A causa della natura del funzionamento di questi script, la spiegazione può sembrare complicata, ma sii paziente: dovrebbe avere un senso una volta che si guadagna un po’ di esperienza con questi argomenti. In realtà non è necessario conoscere gli angoli ins-and-outs di questi script, ma aiuta a capire come e perché funzionano. Quindi, prendete una sedia e io farò del mio meglio per farlo sembrare il meno complicato possibile.
Escape/Unescape

La prima sezione di questa pagina spiega come fale “escape” su qualsiasi testo, HTML o Javascript per renderlo illeggibile in generale per l’utente comune. I codici URL di escape hanno due caratteri con valori esadecimali (8-bit) preceduti da un segno %. Questo viene utilizzato principalmente negli URL del browser o per l’uso quando si creano dei cookie per i caratteri che altrimenti non funzionano, perché sono caratteri riservati (come gli spazi e simili).
Ad esempio, se si ha il nome di un file HTML come “prima pagina”, il codice URL con escape assomiglierebbe a “prima%20pagina“. Il 20% è il valore escape per uno spazio. Normalmente, si dovrebbe fare escape solo ai caratteri speciali (in genere qualsiasi carattere diverso da az, AZ e 0-9), ma lo script qui sotto fa l’escape, in realtà, a tutto il testo semplicemente sostituendo tutti i caratteri con i loro equivalenti con l’escape. Quindi, se si dovesse fare l’escape completamente alle parole “prima pagina“, diventerebbe simile: %70%72%69%6D%61%20%70%61%67%69%6E%61. Ora, nessuna parte del testo è facilmente decifrabile, anche se la maggior parte era composta da caratteri normali.
Dal momento che il browser è in grado di gestire i codici di escape da sé, questo può essere usato abbastanza facilmente, senza dover aggiungere uno script in più per decifrarli. Quindi, se si desidera che il browser scriva quel testo con escape nella pagina, si potrebbe fare qualcosa di simile:
Copia codice

          <script language="javascript">
            document.write(unescape('%70%72%69%6D%61%20%70%61%67%69%6E%61'));
          </script>
Tutto quello che si sta facendo qui è mettere la stringa di escape in una serie di citazioni (important!), avvolgendolo all’interno del metodo built-in unescape(), e poi avvolgendo il tutto in un metodo document.write(). Questo potrebbe sembrare un po’ inutile, ma si potrebbe nascondere un indirizzo e-mail per evitare che i crawler Web strappi il tuo indirizzo e-mail dalla tua pagina web da utilizzare per inviare in massa degli spam e-mailing, e consente ai visitatori di leggere bene.
Ad esempio, il mio email completamente con escape sarebbe simile ad un crawler web:
Copia codice

          <script language="javascript">
            document.write( unescape('%70%6F%73%74%6D%61%73%74%65%72%40%72%68%61%64%72%69%78%2E%6E%65%74'));
          </script>
… ma sarebbe simile a quanto segue ad un visitatore:postmaster@rhadrix.net
Le due seguenti textarea ci consente di fare pienamente l’escape e viceversa al testo desiderato. Basta digitare qualsiasi testo/HTML/JavaScript che si desidera nel riquadro di sinistra e fare clic sul pulsante --> per ottimizzarne l’escape. Allo stesso modo, fare clic sul pulsante <-- per riconvertirlo in testo normale, per verificare che è lo stesso dell’originale. È possibile copiare e incollare il codice con escape nella tua pagina (non dimenticare di usarei metodi unescape() e document.write()).

Testo/HTML/JavaScript Normale
(Seleziona tutto)

Escaped Text/HTML/JavaScript
(Seleziona tutto)

Encoding/Decoding
Ora, probabilmente si è capito che si potrebbe nascondere un intera pagina HTML utilizzando il metodo di sopra, ma ci sono due svantaggi: la dimensione del file e la facilità di “cracking” del codice.
Quando si fa’ l’escape ad un’intera pagina, ogni singolo carattere diventano tre caratteri. Ciò triplicherà le dimensioni della pagina. Non è un grosso problema se la pagina ha una dimensione di circa 1-5 KBytes; ma quando si la pagina abbastanza grande (> 10 KBytes), la dimensione del file aumenta rapidamente. Questo potrebbe rallentare il tempo di caricamento per le connessioni dial-up.
Inoltre, se qualcuno dovesse guardare il vostro codice sorgente, sarebbe piuttosto facile capire cosa si sta facendo. Poi si può semplicemente copiare e incollare il codice e fare un piccolo script per visualizzare il contenuto normale. Non vi è alcun modo assoluto infallibile (client-side) per sventare qualcosa visualizzando il codice sorgente se sono abbastanza determinati, il meglio che puoi sperare di fare è di renderlo il più scomodo possibile.
Quindi, per soddisfare entrambi gli interessi si può codificare/decodificare il testo. Ancora una volta, non sarà infallibile impedire alla gente di rubare il contenuto di origine, se veramente lo vogliono. Utilizzando liberamente qui i termini “codifica” e “decodifica” con il seguente script non è considerato una codifica vera e propria, ma è più facile dirlo in questo modo. L’uscita codificata sarà un po’ più lunga del testo originale, ma molto meno che se avesse semplicemente fatto l’escape a tutto il testo.
La sezione precedente, si è fatto l’escape solo al testo. La sezione seguente sposta effettivamente i valori Unicode in modo che il risultato sembri senza senso. Fate una prova e vedrete, non dimenticate di provare con diversi valori chiave di codice dal menu a tendina.

Testo/HTML/JavaScript Normale
(Seleziona tutto)

Chiave codifica:

Testo/HTML/JavaScript Encoded
(Seleziona tutto)

Analisi del codice
I passaggi seguenti è il percorso che fa lo script per realizzare questo effetto quando si fa clic sul pulsante --> (codifica):

  1. In primo luogo, fa l’escape a tutto il testo.
  2. Poi lo script trova i valori Unicode per ogni carattere della stringa.
  3. Poi lo script aggiunge, qualunque sia la Chiave di codifica dal menu a tendina, il valore della casella ad ogni carattere il suo valore Unicode.
  4. Poi lo script deriva i caratteri in base ai valori Unicode spostati.
  5. Il valore della Chiave di codifica è anche incorporato nel testo decodificato in modo che lo script sa come decodificare correttamente la stringa di nuovo.
  6. Infine, fa’ l’escape al risultato ancora una volta per rimuovere eventuali caratteri speciali. Ora, l’output è totalmente estraneo a chiunque rendendolo impossibile spostare i valori Unicode al volo.

La fase di decodifica <-- inverte semplicemente il processo.
Purtroppo, i browsers non hanno alcuna capacità built-in (funzione nativa) per gestire la decodifica, quindi dobbiamo utilizzare una funzione per questo. Dovete fare l'escape alla funzione che gestisce la decodifica per nascondere questa parte, e dare al browser la capacità di scrivere il documento. Non abbiamo veramente bisogno di fare l'escape alla funzione di decodifica, ma renderà molto più difficile per qualcuno di capire cosa sta succedendo. Quindi, la funzione di decodifica può essere utilizzata per decodificare il resto di qualsiasi contenuto ch'è stato codificato. I passaggi che seguono delineano one-by-one la procedura per avere meno confusione.
Fare l'escape alla funzione di decodifica. Prima di fare l'escape, questa appare così:

Copia codice

<script language="javascript">
function dF(s){
var t='';
var s1=unescape(s.substr(0,s.length-1));
for(i=0;i<s1.length;i++)t+=String.fromCharCode(s1.charCodeAt(i)-s.substr(s.length-1,1));
document.write(unescape(t));
}
</script>
Una volta fatto l'escape, la funzione diventa simile a questo:
Copia codice

%3C%73%63%72%69%70%74%20%6C%61%6E%67%75%61%67%65%3D%22%6A%61%76%61%73%63%72%69%70%74%22%3E%0D%0A%66%75%6E%63%74%69%6F%6E%20%64%46%28%73%29%7B%0D%0A%76%61%72%20%73%31%3D%75%6E%65%73%63%61%70%65%28%73%2E%73%75%62%73%74%72%28%30%2C%73%2E%6C%65%6E%67%74%68%2D%31%29%29%3B%20%76%61%72%20%74%3D%27%27%3B%0D%0A%66%6F%72%28%69%3D%30%3B%69%3C%73%31%2E%6C%65%6E%67%74%68%3B%69%2B%2B%29%74%2B%3D%53%74%72%69%6E%67%2E%66%72%6F%6D%43%68%61%72%43%6F%64%65%28%73%31%2E%63%68%61%72%43%6F%64%65%41%74%28%69%29%2D%73%2E%73%75%62%73%74%72%28%73%2E%6C%65%6E%67%74%68%2D%31%2C%31%29%29%3B%0D%0A%64%6F%63%75%6D%65%6E%74%2E%77%72%69%74%65%28%75%6E%65%73%63%61%70%65%28%74%29%29%3B%0D%0A%7D%0D%0A%3C%2F%73%63%72%69%70%74%3E
Pulito eh? 🙂
Comunque, ora doveete fare che il browser scriva questa parte dello script alla pagina avvolgendolo con document.write() e usare il metodo unescape() come segue:
Copia codice

<script language="javascript">
document.write(
  unescape(
%3C%73%63%72%69%70%74%20%6C%61%6E%67%75%61%67%65%3D%22%6A%61%76%61%73%63%72%69%70%74%22%3E%0D%0A%66%75%6E%63%74%69%6F%6E%20%64%46%28%73%29%7B%0D%0A%76%61%72%20%73%31%3D%75%6E%65%73%63%61%70%65%28%73%2E%73%75%62%73%74%72%28%30%2C%73%2E%6C%65%6E%67%74%68%2D%31%29%29%3B%20%76%61%72%20%74%3D%27%27%3B%0D%0A%66%6F%72%28%69%3D%30%3B%69%3C%73%31%2E%6C%65%6E%67%74%68%3B%69%2B%2B%29%74%2B%3D%53%74%72%69%6E%67%2E%66%72%6F%6D%43%68%61%72%43%6F%64%65%28%73%31%2E%63%68%61%72%43%6F%64%65%41%74%28%69%29%2D%73%2E%73%75%62%73%74%72%28%73%2E%6C%65%6E%67%74%68%2D%31%2C%31%29%29%3B%0D%0A%64%6F%63%75%6D%65%6E%74%2E%77%72%69%74%65%28%75%6E%65%73%63%61%70%65%28%74%29%29%3B%0D%0A%7D%0D%0A%3C%2F%73%63%72%69%70%74%3E
  )
)
</script>
Ora che si ha la funzione di decodifica sulla pagina, si può chiamare per decodificare qualsiasi contenuto che avete codificato. Diciamo che si ha uno script che si vuole proteggere, qualcosa come una funzione per la precarica di immagini come questo
Copia codice

<script language="javascript">
function preloadImages(){
var iA=new Array();
for(i=0;i<arguments.length;i++){
iA[i]=new Image();
iA[i].src=arguments[i];
}}
preloadImages('img1.gif','img2.gif','img3.gif');
</script>
Una volta che lo script di sopra è codificato con "Chiave codifica" numero 1, diventa simile a quanto segue:
Copia codice

%264Dtdsjqu%2631mbohvbhf%264E%2633kbwbtdsjqu%2633%264F%261Bgvodujpo%2631qsfmpbeJnbhft%2639%263%3A%268C%261Bwbs%2631jB%264Eofx%2631Bssbz%2639%263%3A%264C%261Bgps%2639j%264E1%264Cj%264Dbshvnfout/mfohui%264Cj%2C%2C%263%3A%268C%261BjB%266Cj%266E%264Eofx%2631Jnbhf%2639%263%3A%264C%261BjB%266Cj%266E/tsd%264Ebshvnfout%266Cj%266E%264C%261B%268E%268E%261B%261BqsfmpbeJnbhft%2639%2638jnh2/hjg%2638%263D%2638jnh3/hjg%2638%263D%2638jnh4/hjg%2638%263%3A%264C%261B%264D0tdsjqu%264F1
Poi, si decodifica la stringa chiamando la funzione dF() (che fa l'unescape e lo scive sulla pagina nel passaggio precedente) in questo modo:
Copia codice

dF('%264Dtdsjqu%2631mbohvbhf%264E%2633kbwbtdsjqu%2633%264F%261E%261Bgvodujpo%2631qsfmpbeJnbhft%2639%263%3A%268C%261E%261Bwbs%2631jB%264Eofx%2631Bssbz%2639%263%3A%264C%261E%261Bgps%2639j%264E1%264Cj%264Dbshvnfout/mfohui%264Cj%2C%2C%263%3A%268C%261E%261BjB%266Cj%266E%264Eofx%2631Jnbhf%2639%263%3A%264C%261E%261BjB%266Cj%266E/tsd%264Ebshvnfout%266Cj%266E%264C%261E%261B%268E%268E%261E%261B%261E%261BqsfmpbeJnbhft%2639%2638jnh2/hjg%2638%263D%2638jnh3/hjg%2638%263D%2638jnh4/hjg%2638%263%3A%264C%261E%261B%264D0tdsjqu%264F1');
Così, per mettere insieme tutto questo, quanto segue è ciò che si incolla nella pagina:
Copia codice

<script language="javascript">
document.write(unescape('%3C%73%63%72%69%70%74%20%6C%61%6E%67%75%61%67%65%3D%22%6A%61%76%61%73%63%72%69%70%74%22%3E%0D%0A%66%75%6E%63%74%69%6F%6E%20%64%46%28%73%29%7B%0D%0A%76%61%72%20%73%31%3D%75%6E%65%73%63%61%70%65%28%73%2E%73%75%62%73%74%72%28%30%2C%73%2E%6C%65%6E%67%74%68%2D%31%29%29%3B%20%76%61%72%20%74%3D%27%27%3B%0D%0A%66%6F%72%28%69%3D%30%3B%69%3C%73%31%2E%6C%65%6E%67%74%68%3B%69%2B%2B%29%74%2B%3D%53%74%72%69%6E%67%2E%66%72%6F%6D%43%68%61%72%43%6F%64%65%28%73%31%2E%63%68%61%72%43%6F%64%65%41%74%28%69%29%2D%73%2E%73%75%62%73%74%72%28%73%2E%6C%65%6E%67%74%68%2D%31%2C%31%29%29%3B%0D%0A%64%6F%63%75%6D%65%6E%74%2E%77%72%69%74%65%28%75%6E%65%73%63%61%70%65%28%74%29%29%3B%0D%0A%7D%0D%0A%3C%2F%73%63%72%69%70%74%3E'));
dF('%264Dtdsjqu%2631mbohvbhf%264E%2633kbwbtdsjqu%2633%264F%261E%261Bgvodujpo%2631qsfmpbeJnbhft%2639%263%3A%268C%261E%261Bwbs%2631jB%264Eofx%2631Bssbz%2639%263%3A%264C%261E%261Bgps%2639j%264E1%264Cj%264Dbshvnfout/mfohui%264Cj%2C%2C%263%3A%268C%261E%261BjB%266Cj%266E%264Eofx%2631Jnbhf%2639%263%3A%264C%261E%261BjB%266Cj%266E/tsd%264Ebshvnfout%266Cj%266E%264C%261E%261B%268E%268E%261E%261B%261E%261BqsfmpbeJnbhft%2639%2638jnh2/hjg%2638%263D%2638jnh3/hjg%2638%263D%2638jnh4/hjg%2638%263%3A%264C%261E%261B%264D0tdsjqu%264F1');
</script>
 
Sulla linea 2 si trova la parte che effettua l'unescape della funzione di decoder, e la parte che decodifica lo script per la precarica delle immagini sulla seguente linea. Si potrebbe semplicemente incollare l'intera sezione al di sopra nella pagina e lo script dovrebbe funzionare perfettamente. Sì, sembra confuso, ma questo è il punto non è vero? Oh, e una cosa di più: l'intera stringa dovrebbe apparire su una riga, non è possibile aggiungere interruzioni di riga forzate.
La stessa cosa si fa se si vuole codificare una intera pagina HTML, tranne la parte codificata della stringa (linea 3) che potrebbe diventare enorme. La linea 2 non cambierebbe comunque