Frage

So habe ich für den Schutz des geistigen Eigentums, ohne sich mit dem Auftreten der Interaktivität der resultierenden Seite vor kurzem auf einem Skript zu verschleiern clientseitigen Code gearbeitet. Der Ablauf ist wie folgt:

  1. HTTP-Anforderung kommt, .htaccess Umleitungen (. *) Zu parse_request.php
  2. parse_request.php schafft eine „phpURLParser“ Klasse, deren Klassenvariablen sind im Wesentlichen Kopien des $ _SERVER Variablen
  3. sieht phpURLParser auf den gewünschten Pfad, und manchmal auch die Gastgeber, referer oder andere serverseitige Informationen, um zu bestimmen, wie sie zu reagieren. Es gibt mehrere mögliche Antworten

a. Das angeforderte Objekt war ein Js oder CSS-Datei. Führen Sie die Datei auf den YUI Compressor und senden Sie die Ausgabe

b. Das angeforderte Objekt ist ein Bild oder eine Anwendung. Übergeben Sie die Datei ohne Änderung

c. Das angeforderte Objekt enthält HTML. Ersetzen jedes ASCII-Zeichen mit seiner 2-stellige hexadezimale Äquivalent und senden Sie die folgende 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>

So wird die Website durch eine Menge von Hex ersetzt und ein kleines Javascript, um die Hex in seine ursprüngliche Form zurückzukehren. Ich habe ein Beispiel für diese Einrichtung bei examples.chikachu.com/colorbox/example1 (ich habe keinen Code ColorBox, es ist ein kostenloses jQuery-Tool, dass ich da, es zu benutzen gewählt habe mich erlaubt, mehrere verschiedene JavaScript-Funktionen zu testen und sicherzustellen, dass sie alle arbeitet)

Nun zum Problem:

Wie sich herausstellt, funktioniert diese 99% der Zeit. Aber AJAX macht es wütend. Ein Klick auf eines der AJAX Beispiele (unter „Andere Inhaltstypen“) aussehen wird es Ihnen auf eine neue Seite umleitet. Suchen Sie in der Adressleiste oder die Anzeige der Seite Quelle unter Beweis stellt, dass Sie immer noch auf der gleichen Seite, aber. Unter Verwendung das Inspect Element-Tool in Chrome (oder Firebug in Firefox) wird der Inhalt der Webseite zeigt, dass die durch die Inhalte des AJAX-Request vollständig ersetzt wurde.

Wenn ich ändere parse_request.php leicht die Datei vom AJAX angefordert zu ermöglichen, durch unversehrt, alles Werke weitergegeben werden. Kein Problem. Also aus irgendeinem Grunde meines Skript, das den String mit Hex mit seinem aussagekräftigen HTML Gegenstück ersetzt wird, um die gesamte Website zu überschreiben, statt schön von selbst aus einem innerhalb der Grenzen Einfügen

Objekts.

Im Wesentlichen ist hier das erwartete nicht-verschleierten HTML:

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

Mit nur die AJAX verschleierten erwarte ich, dass die folgende:

<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>

Ich gehe davon aus, dass die document.write () Linie hier y an der Stelle des Javascript schreiben wird (innerhalb des

). Wenn ich mich irre, und das ist nicht, wie document.write () funktioniert, ich erwarte, dass es immer noch y am Ende des Dokuments zu schreiben. Stattdessen wird das gesamte Dokument durch y ersetzt. Warum ist das, und was ist meine Lösung?

War es hilfreich?

Lösung

Versuchen Sie etwas wie folgt aus:

<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> 

Andere Tipps

Antwort auf Ihre letzte Frage: Der Aufruf

  

document.write ( 'my_precious_html_code');

wird anhängen oder überschreiben Text auf Seite abhängig, wenn es (vor oder nach dem Ereignis onLoad) genannt wurde. Sie sollten es nicht alle Skript. Lesen Sie mehr darüber hier: http://javascript.crockford.com/script.html

Allgemeine Antwort: HTML-Code Verschleiern keinen Sinn machen. Genau wie Bilder Schutz mit der rechten Maustaste in den späten '90 deaktivieren. Es dauerte weniger als 3 Sekunden zu „knacken“ Ihr verschleierten Code und get schön formatiert HTML. Auch Ihre Website in gerendert Quirks-Modus das ist wahrscheinlich etwas, was Sie nicht wollen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top