Domanda

Quindi di recente ho lavorato su uno script per offuscare il codice lato client per proteggere la proprietà intellettuale senza interferire con l'aspetto interattivo della pagina risultante.Il processo è il seguente:

  1. Arriva la richiesta HTTP, .htaccess reindirizza (.*) a parse_request.php
  2. parse_request.php crea una classe "phpURLParser" le cui variabili di classe sono essenzialmente copie delle variabili $_SERVER
  3. phpURLParser esamina il percorso richiesto e talvolta l'host, il referer o altre informazioni lato server per determinare come reagire.Ci sono diverse risposte possibili

UN.L'oggetto richiesto era un file .js o .css.Passa il file allo YUI Compressor e invia l'output

B.L'oggetto richiesto è un'immagine o un'applicazione.Passa il file senza modifiche

C.L'oggetto richiesto contiene HTML.Sostituisci ogni carattere ASCII con il suo equivalente esadecimale a 2 cifre e invia il seguente javascript:

<script type="text/javascript">
var x="~lots of hex~";
var y="";
for(i=0; i<x.length; i+=2){
    y += unescape('%'+x.substr(i,2));
}
document.write(y);
</script>

Quindi il sito web viene sostituito da un sacco di hex e un piccolo javascript per riportare l'hex alla sua forma originale.Ho un esempio di questa configurazione su esempi.chikachu.com/colorbox/example1 (non ho codificato ColorBox, è uno strumento jQuery gratuito che ho scelto di utilizzare poiché mi ha permesso di testare diverse funzionalità JavaScript e assicurarmi che siano tutte lavorato)

Ora per il problema:

A quanto pare, funziona il 99% delle volte.Ma AJAX lo fa arrabbiare.Facendo clic su uno degli esempi AJAX (sotto "Altri tipi di contenuto") sembrerà che ti reindirizzi a una nuova pagina.Tuttavia, guardare nella barra degli indirizzi o visualizzare l'origine della pagina dimostrerà che sei ancora sulla stessa pagina.Utilizzando lo strumento Ispeziona Elemento in Chrome (o Firebug in Firefox) rivelerà che il contenuto della pagina web è stato interamente sostituito dal contenuto della richiesta AJAX.

Se modifico leggermente parse_request.php per consentire il passaggio indenne del file richiesto da AJAX, tutto funziona.Nessun problema.Quindi, per qualche motivo, il mio script che sostituisce la stringa esadecimale con la sua controparte HTML significativa sta sovrascrivendo l'intero sito Web invece di inserirsi piacevolmente entro i confini di un oggetto <div>.

Essenzialmente ecco l'HTML previsto non offuscato:

<html>
<head>
    ...
</head>
<body>
    <div id="colorbox">
        <INSERT AJAX HERE>
    </div>
    ...
</body>
</html>

Con solo AJAX offuscato, mi aspetto quanto segue:

<html>
<head>
    ...
</head>
<body>
    <div id="colorbox">
        <script type="text/javascript">
        var x="asdfasdfasdfasdf";
        var y="";
        for(i=0; i<x.length; i+=2){
            y += unescape('%'+x.substr(i,2));
        }
        document.write(y);
        </script>
    </div>
    ...
</body>
</html>

Mi aspetto che la riga document.write() qui scriva y nella posizione del javascript (all'interno del <div>).Se sbaglio e non è così che funziona document.write(), mi aspetto comunque che scriva y alla fine del documento.Invece, l'intero documento viene sostituito da y.Perché è questo e qual è la mia soluzione?

È stato utile?

Soluzione

provare qualcosa di simile:

<html> 
<head> 
    ... 
</head> 
<body> 
    <div id="colorbox">
        <div id="MYAJAXCONTENT">
        </div>
        <INSERT AJAX HERE> 
    </div> 
    ... 
</body> 
</html> 

<html> 
<head> 
    ... 
</head> 
<body> 
    <div id="colorbox"> 
        <script type="text/javascript"> 
        var x="asdfasdfasdfasdf"; 
        var y=""; 
        for(i=0; i<x.length; i+=2){ 
            y += unescape('%'+x.substr(i,2)); 
        } 
        document.getElementById('MYAJAXCONTENT').innerHTML = y; 
        // for the jQuery psychos out there
        // $('#MYAJAXCONTENT').html(y);
        </script> 
    </div> 
    ... 
</body> 
</html> 

Altri suggerimenti

Risposta alla tua ultima domanda:Chiamando

document.write('my_precious_html_code');

aggiungerà o sovrascriverà il testo sulla pagina a seconda di quando è stato chiamato (prima o dopo l'evento onLoad).Non dovresti usarlo Qualunque sceneggiatura.Per saperne di più qui: http://javascript.crockford.com/script.html

Risposta generale:Offuscare il codice HTML non ha alcun senso.Proprio come proteggere le immagini disabilitando il pulsante destro del mouse alla fine degli anni '90.Mi ci sono voluti meno di 3 secondi per "crackare" il tuo codice offuscato e ottenere un HTML splendidamente formattato.Anche il tuo sito è renderizzato modalità stranezze che probabilmente è qualcosa che non vuoi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top