Pergunta

Então eu tenho trabalhado recentemente em um script para ocultar código do lado do cliente para a proteção da propriedade intelectual, sem interferir com a aparência de interatividade da página resultante.O processo é o seguinte:

  1. Solicitação HTTP vem .htaccess redirecionamentos (.*) para parse_request.php
  2. parse_request.php cria-se um "phpURLParser" classe cujas variáveis de classe são, essencialmente, cópias de $_SERVER variáveis
  3. phpURLParser examina o pedido caminho, e às vezes o anfitrião, referer, ou outras informações do lado do servidor para determinar como reagir.Há várias respostas possíveis

um.O objeto requisitado foi um .js ou .arquivo css.Passar o arquivo para o YUI Compressor e enviar a saída

b.O objeto solicitado é uma imagem ou aplicação.Passar o arquivo sem alterar

c.O objeto solicitado contém HTML.Substitua todos os caracteres ASCII, com seus 2 dígitos hexadecimal equivalente e enviar o seguinte 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>

Assim, o site é substituído por um monte de hex e um pequeno javascript para devolver o hex para sua forma original.Eu tenho um exemplo desta configuração em examples.chikachu.com/colorbox/example1 (eu não código Javascript, é uma ferramenta jQuery que eu escolhi para usar pois permitiu-me testar vários javascript recursos e certifique-se de que todos eles trabalharam)

Agora para o problema:

Como se vê, isso funciona 99% do tempo.Mas o AJAX torna-se irritado.Clicar em um dos AJAX exemplos (em "Outros Tipos de Conteúdo") será parecido com ele redireciona para uma nova página.Olhando na barra de endereços ou a visualizar o código fonte da página que vai provar que você ainda está na mesma página, no entanto.Usando o Inspecionar Elemento ferramenta no google Chrome (ou o Firebug no Firefox) revela que o conteúdo da página, que foram completamente substituídos pelo conteúdo da solicitação AJAX.

Se eu modificar parse_request.php ligeiramente para permitir que o arquivo solicitado pelo AJAX para ser passado ileso, tudo funciona.Não há problema.Por alguma razão o meu script que substitui a cadeia de hex com seu significado HTML contrapartida é substituir todo o site, em vez de bem enquadrando-se dentro dos limites de uma <div> objecto.

Essencialmente, aqui está o esperado não ofuscado HTML:

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

Com apenas o AJAX ofuscado, espero que o seguinte:

<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 o documento.write() linha aqui vai escrever y na localização do javascript (dentro do <div>).Se eu estou enganado e não como documento.write() funciona, eu ainda esperava escrever y no final do documento.Em vez disso, todo o documento é substituído por y.Por que é este, e qual é a minha solução?

Foi útil?

Solução

Tente algo como isso:

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

Outras dicas

A resposta para a sua pergunta:Chamar

documento.write('my_precious_html_code');

irá acrescentar ou substituir texto na página dependendo de quando ele foi chamado (antes ou depois do evento onLoad).Você não deve usá-lo qualquer script.Leia mais sobre ele aqui: http://javascript.crockford.com/script.html

Geral de resposta:Ofuscação de código HTML não faz qualquer sentido.Assim como proteger imagens desativando o botão direito do mouse em finais dos anos 90.Ele me levou menos de 3 segundos para "decifrar" o código ofuscado e obtenha muito bem formatadas em HTML.Também o seu site é processado em de modo quirks que é provavelmente algo que você não quer.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top