Pregunta

Así que he estado trabajando recientemente en un guión de código de cliente obfuscate para la protección de la propiedad intelectual, sin interferir con la aparición de la interactividad de la página de resultados. El proceso es como sigue:

  1. HTTP petición llega, redirecciones .htaccess (. *) Para parse_request.php
  2. parse_request.php crea una clase "phpURLParser" cuyas variables de clase son esencialmente copias de las variables $ _SERVER
  3. phpURLParser se ve en la ruta solicitada, y en ocasiones el anfitrión, árbitro u otra información de servidor para determinar cómo reaccionar. Hay varias respuestas posibles

a. El objeto solicitado era un archivo .js o .css. Pasar el archivo a la YUI Compresor y enviar la salida

b. El objeto solicitado es una imagen o una aplicación. Pasar el archivo sin cambios

c. El objeto solicitado contiene HTML. Reemplazar todos los caracteres ASCII con su equivalente hexadecimal de 2 dígitos y envíe el siguiente 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>

Así que la página web se sustituye por una gran cantidad de hexagonal y una pequeña Javascript para devolver el hexágono a su forma original. Tengo un ejemplo de esta configuración en examples.chikachu.com/colorbox/example1 (no lo hice código ColorBox, es una herramienta gratuita de jQuery que he elegido para usar, ya que me permitió probar varias características diferentes de JavaScript y asegurarse de que todo trabajado)

Ahora para el problema:

Como resultado, esto funciona 99% del tiempo. Pero AJAX hace que sea enojado. Al hacer clic en uno de los ejemplos de AJAX (bajo "Otros tipos de contenido") se verá como se le redirige a una página nueva. Buscando en la barra de direcciones o la visualización de la fuente de la página demostrará que usted todavía está en la misma página, sin embargo. Con la herramienta Inspeccionar elemento en Chrome (u Firebug en Firefox) se ponen de manifiesto que el contenido de la página web fueron reemplazados en su totalidad por el contenido de la petición AJAX.

Si modifico parse_request.php ligeramente para permitir que el archivo solicitado por el AJAX para ser pasado a través ileso, todo funciona. No hay problema. Así que por alguna razón mi script que sustituye la cadena de hexágono con su contraparte significativa HTML está sobrescribiendo todo el sitio web en lugar de bien insertarse dentro de los confines de un

objeto.

En esencia, aquí está la espera no ofuscado HTML:

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

Con sólo el AJAX ofuscado, espero que el siguiente:

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

espero que la línea document.write () escribirá aquí y en el lugar del Javascript (dentro del

). Si estoy equivocado y no es así como document.write () funciona, todavía esperaba que escribir y al final del documento. En su lugar, todo el documento se sustituye por y. ¿Por qué es esto, y lo que es mi solución?

¿Fue útil?

Solución

intentar algo como esto:

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

Otros consejos

respuesta a la última pregunta: Llamando

  

document.write ( 'my_precious_html_code');

anexará o texto en la página de anulación en función cuando se llamaba (antes o después del proceso de carga). No se debe utilizar cualquier guión. Lea más sobre esto aquí: http://javascript.crockford.com/script.html

respuesta general: Ofuscar código HTML no tiene ningún sentido. Al igual que la protección de las imágenes mediante la desactivación de botón derecho del ratón a finales de los '90. Me tomó menos de 3 segundos para el "crack" su código ofuscado y conseguir un formato atractivo HTML. También su sitio se representa en modo , que es probablemente algo que no desea peculiaridades.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top