AJAX retornar um javascript a ser analisado, resultando na perda do conteúdo da página
-
25-09-2019 - |
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:
- Solicitação HTTP vem .htaccess redirecionamentos (.*) para parse_request.php
- parse_request.php cria-se um "phpURLParser" classe cujas variáveis de classe são, essencialmente, cópias de $_SERVER variáveis
- 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?
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.