Question

Je travaille ai récemment sur un script pour obscurcir le code côté client pour la protection de la propriété intellectuelle sans interférer avec l'apparition de l'interactivité de la page résultante. Le processus est le suivant:

  1. HTTP requête arrive, réoriente .htaccess (. *) À parse_request.php
  2. parse_request.php crée un "phpURLParser" classe dont les variables de classe sont essentiellement des copies des variables $ _SERVER
  3. phpURLParser regarde le chemin demandé, et parfois l'hôte, referer, ou d'autres informations côté serveur pour déterminer comment réagir. Il y a plusieurs réponses possibles

a. L'objet demandé était un fichier .js ou Css. Passez le fichier au compresseur YUI et envoyer la sortie

b. L'objet est une image ou d'une application. Passez le fichier sans changement

c. L'objet demandé contient du HTML. Remplacer tous les caractères ASCII avec son équivalent hexadécimal à 2 chiffres et envoyer le javascript suivant:

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

Ainsi, le site est remplacé par un grand nombre d'hex et un petit javascript pour retourner l'hexagone à sa forme originale. J'ai un exemple de cette configuration à examples.chikachu.com/colorbox/example1 (je ne codez pas ColorBox, il est un outil gratuit jQuery que j'ai choisi d'utiliser, car il m'a permis de tester plusieurs différentes fonctions javascript et assurez-vous tous travaillé)

Maintenant le problème:

Il se trouve, cela fonctionne 99% du temps. Mais AJAX rend en colère. Cliquez sur l'un des exemples AJAX (sous la rubrique « Autres types de contenu ») ressemblera à ce que vous redirige vers une nouvelle page. En regardant dans la barre d'adresse ou d'afficher la page source prouvera que vous êtes toujours sur la même page, cependant. Utilisation de l'outil élément Vérifiez dans Chrome (ou Firebug dans Firefox) révèle que le contenu de la page Web ont été entièrement remplacées par le contenu de la requête AJAX.

Si je modifie parse_request.php légèrement pour permettre le fichier demandé par le AJAX pour être passé à travers sains et saufs, tout fonctionne. Aucun problème. Donc, pour quelque raison que mon script qui remplace la chaîne de hex avec son homologue HTML significatif est l'ensemble du site en écrasant au lieu de s'insérant bien dans les limites d'un

objet.

Pour l'essentiel est ici le HTML devrait non Obfuscated:

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

Avec seulement l'AJAX brouillées, j'attends les éléments suivants:

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

Je pense que la ligne ici rédigera y document.write () à l'emplacement du javascript (dans le

). Si je ne me trompe pas et ce n'est pas comment document.write () fonctionne, je pense toujours à y écrire à la fin du document. Au lieu de cela, le document entier est remplacé par y. Pourquoi est-ce, et quelle est ma solution?

Était-ce utile?

La solution

Essayez quelque chose comme ceci:

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

Autres conseils

Réponse à votre dernière question: Appel

  

document.write ( 'my_precious_html_code');

ajoutera ou remplacer le texte à la page en fonction quand il a été appelé (avant ou après l'événement onLoad). Vous ne devriez pas utiliser tout script . En savoir plus ici: http://javascript.crockford.com/script.html

Réponse générale: Dissimuler code HTML ne fait aucun sens. Tout comme la protection des images en désactivant le bouton droit de la souris à la fin '90. Il m'a fallu moins de 3 secondes pour « casser » votre code HTML obscurcie et obtenir magnifiquement formaté. De plus, votre site est rendu dans mode bizarreries qui est probablement quelque chose que vous ne voulez pas.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top