Como é que protejo os ficheiros javascript? [duplicado]
esta pergunta já tem uma resposta aqui:
- Como posso ofuscar (proteger) o JavaScript? [fechado] 24 respostas
Eu sei que é impossível esconder o código fonte, mas, por exemplo, se eu tiver que ligar um arquivo JavaScript do meu CDN para uma página web e eu não quero que as pessoas saibam a localização e / ou o conteúdo deste script, é isto possível?
por exemplo, para ligar um script a partir de um site, nós usamos:
<script type="text/javascript" src="http://somedomain.com/scriptxyz.js">
</script>
agora, é possível esconder do usuário de onde o script vem, ou esconder o conteúdo do script e ainda usá-lo em uma página web?
Por exemplo, ao guardá-lo no meu CDN privado que precisa de senha para aceder aos ficheiros, isso funcionaria? Se não, o que funcionaria para conseguir o que eu quero?9 answers
Boa pergunta com uma resposta simples: você não pode!
Javascript é uma linguagem de programação do lado do cliente, portanto funciona na máquina do cliente, então você não pode realmente esconder nada do cliente.Ofuscar o seu código é uma boa solução, mas não é suficiente, porque, embora seja difícil, alguém pode decifrar o seu código e" roubar " o seu script.
Há algumas maneiras de tornar o seu código difícil de ser roubado, mas como eu disse, nada é à prova de bala. Do início da minha cabeça, uma ideia é restringir o acesso aos seus ficheiros js externos de fora da página em que introduziu o seu código. Nesse caso, se tem
<script type="text/javascript" src="myJs.js"></script>
E alguém tenta aceder aos myJs.ficheiro js no browser, não lhe deve ser concedido qualquer acesso à fonte do script.Por exemplo, se a sua página estiver escrita em php, pode incluir o script através da função
include
e deixar o script decidir se é seguro " para devolver fonte.Neste exemplo, você vai precisar do "js" externo (escrito em php) arquivo myJs.php :
<?php
$URL = $_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
if ($URL != "my-domain.com/my-page.php")
die("/\*sry, no acces rights\*/");
?>
// your obfuscated script goes here
Isso estaria incluído na sua página principal.php :
<script type="text/javascript">
<?php include "myJs.php"; ?>;
</script>
Desta forma, só o navegador podia ver o conteúdo do ficheiro js.
Outra ideia interessante é que no final do seu script, você apaga o conteúdo do seu elemento de script dom, de modo que depois que o navegador avalia o seu código, o código desaparece :
<script id="erasable" type="text/javascript">
//your code goes here
document.getElementById('erasable').innerHTML = "";
</script>
[10]Estes são apenas simples hacks que não podem, e eu não posso enfatizar isso o suficiente : não pode, totalmente proteger o seu código js, mas eles podem com certeza irritar alguém que está tentando "roubar" o seu código.
Actualização:
Eu vim recentemente através um artigo muito interessante escrito por Patrick Weid sobre como ocultar o código js, e ele revela uma abordagem diferente: você pode codificar o seu código-fonte em uma imagem! Claro, isso também não é à prova de bala, mas é ... outra cerca que podias construir à volta do teu código.
A idéia por trás desta abordagem é que a maioria dos navegadores pode usar o elemento canvas para fazer manipulação de pixels em imagens. E como o pixel da tela é representado por 4 valores (rgba), cada pixel pode ter um valor na faixa de 0-255. Isso significa que você pode armazenar um personagem (atual é código ascii) em cada pixel. O resto da codificação/descodificação é trivial.
Obrigado, Patrick!
A única coisa que podes fazer é ofuscar o teu código para tornar mais difícil de ler. Não importa o que você faça, se você quer que o javascript para executar em seu navegador eles terão que ter o código.
O seu navegador tem de ter acesso aos ficheiros JS para os poder executar. Se o navegador tem acesso, então o usuário do navegador também tem acesso.
Se a senha proteger os seus ficheiros JS, então o navegador não será capaz de os aceder, derrotando o objectivo de ter JS em primeiro lugar.
Logo no topo da minha cabeça, você poderia fazer algo assim (se você pode criar scripts do lado do servidor, o que parece que você pode):
Em vez de carregar o script como normal, envie um pedido AJAX para uma página do PHP (pode ser qualquer coisa; eu mesmo o uso). Faça com que o PHP localize o ficheiro (talvez numa parte não pública do servidor), abra-o com file_get_contents
, e devolva (leia: echo
) o conteúdo como um texto.
Quando este texto regressar ao JavaScript, peça-lhe para criar um nova etiqueta script
, Preencha o seu innerHTML
com o código que acabou de receber, e anexe a etiqueta à página. Pode ter problemas com isto, pode não ser o que precisa, mas pode experimentar.)
Se fizer isto muitas vezes, poderá até querer configurar uma página do PHP que aceite uma variável GET com o nome do script, para que possa agarrar dinamicamente diferentes scripts usando o mesmo PHP. (Talvez você poderia usar POST em vez disso, para torná - lo apenas um pouco mais difícil para outras pessoas para ver o que estás a fazer. Não sei.)
EDIT: pensei que só estavas a tentar esconder a localização do guião. Obviamente, isto não ajudaria muito se tentasses esconder o guião em si.
Compilador de Encerramento do Google, compressor YUI, Minify, /Packer / ... etc, são opções para comprimir/ofuscar os seus códigos JS. Mas nenhum deles pode ajudá-lo a esconder seu código dos usuários.
Qualquer pessoa com um conhecimento decente consegue descodificar facilmente o seu código usando ferramentas como JS Beautifier. É só dizeres.
Então a resposta é, você pode sempre tornar o seu código mais difícil de ler/descodificar, mas com certeza não há maneira de ocultar.
Eu acho que a única maneira é colocar os dados necessários no servidor e permitir que apenas o usuário logado para acessar os dados conforme necessário (você também pode fazer alguns cálculos lado do servidor). Isto não irá proteger o seu código javascript, mas torná-lo inoperável sem o código do lado do servidor
Como eu disse no comentário que deixei na resposta gion_13 antes (por favor Leia), você realmente não pode. não com javascript.
Se não queres que o código esteja disponível do lado do cliente (=roubável sem grandes esforços), minha sugestão seria fazer uso do PHP (ASP,Python,Perl,Ruby,JSP + Java-Servlets) que é processado do lado do servidor e apenas os resultados da computação/execução de código são servidos ao usuário. Ou, se preferir, até um Flash ou um Java-Applet que permite ao lado do cliente computation / code execution but are compiled and thus harder to reverse-engine (not impossible thus).
Só os meus dois cêntimos.