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?

Author: Artjom B., 2011-01-22

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!

 85
Author: gion_13, 2014-07-09 13:20:17

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.

 12
Author: GWW, 2017-05-23 10:31:09
Do meu conhecimento, isto não é possível.

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.

 3
Author: darioo, 2011-01-22 08:15:14

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.

 3
Author: sdleihssirhc, 2011-01-22 08:17:05
Esquece, isto não é possível. Não importa o que tentes, não vai resultar. Tudo o que um utilizador precisa de fazer para descobrir o seu código e a sua localização é procurar na página net em firebug ou usar fiddler para ver que Pedidos estão a ser feitos.
 3
Author: Martin Jespersen, 2011-01-22 08:17:20

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.

 2
Author: Lionel Chan, 2011-01-22 08:37:41

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

 1
Author: ejectamenta, 2013-03-26 19:28:10

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.
 0
Author: danicotra, 2013-10-21 19:15:56