Como impedir que um usuário edite meu código no navegador?

11

Descrição

Estou projetando um aplicativo Node.JS (mais como um site completo). O aplicativo enviará cinco arquivos JavaScript e terá <script>tags que os vincularão.

Questão

Como posso impedir que usuários e invasores espiem e editem meu código ?

  • Um exemplo seria:

    • Ctrl+ Shift+I

    • No Devtools , vá para Fontes , selecione um arquivo para editar (ou seja index.html) e escreva edições

    • Pressionar Ctrl+ Sfará com que a edição ao vivo ocorra

Gostaria de impedir que o exemplo acima ocorra ... É possível?


Aqui está o que eu pensei:

Vou criar outro arquivo JavaScript do lado do cliente, prevent_keys.js

Ele ouvirá Ctrl+ Shift+ I.

Se retornar true(ou seja, as teclas foram pressionadas), serão logas teclas.

No entanto, isso não impedirá o usuário de usar o Devtools diretamente.

Edwin Pratt
fonte
16
Você não pode impedir que alguém veja ou modifique seu javascript que é executado no navegador. Não pode.
jfriend00
7
Só porque a resposta a uma pergunta é "Você não pode". Não significa que ela deva ser reduzida.
precisa
1
Pergunta muito relacionada: validação somente do JavaScript no envio do formulário AJAX . Especialmente, verifique a resposta aceita com seu exemplo trivial de como enviar uma chamada POST que, para o servidor, parece idêntica à que veio do seu cliente, apesar de nem mesmo ser proveniente de um navegador da web.
8bittree

Respostas:

35

Você literalmente não pode impedir que os usuários acessem e modifiquem o conteúdo que você está enviando. Você não tem controle sobre o navegador, ou qual navegador ele usa, ou se, de fato, está baixando seu código-fonte por meio de um navegador. Você está executando seu código no dispositivo de outra pessoa. Você não deve e não pode assumir nada sobre a integridade deste dispositivo.

Se você possui um código que não deseja expor, não o envie ao navegador. Em vez disso, deixe o navegador enviar uma solicitação para um servidor onde você executa o código secreto.

Como um exemplo concreto, não verifique senhas no cliente. O cliente pode ser modificado para sempre informar ao servidor "a senha estava correta". Em vez disso, a autenticação deve ocorrer no servidor confiável.

amon
fonte
4
"O cliente pode ser modificado para sempre informar ao servidor" a senha estava correta "." tosse libssh tosse
Philip Kendall
Muito obrigado! Eu estava enviando manipuladores para login, logout e inscrição. Eu mudei para rotas no servidor.
Edwin Pratt
23

Você não pode. Uma das regras fundamentais da computação: você não pode confiar no cliente . Qualquer que seja o esquema inteligente em que você pense, posso contorná-lo se estiver no controle do cliente.

Philip Kendall
fonte
2
Mudei todos os manipuladores de validação, upload, download e userAccouts () para a inclusão do servidor.
Edwin Pratt
1
"Você não pode confiar no cliente" é apenas um lado da moeda. O outro lado diz: "Você não é o proprietário do cliente". O navegador que executa seu javascript não é seu, o sistema operacional que executa o navegador não é seu e o hardware em que o navegador é executado não é seu. O que quer que o proprietário dessas coisas faça com os dados que você envia a eles não é da sua conta . É uma questão de respeito para seus clientes não tentarem usurpar as coisas deles.
cmaster - reinstate monica
2

Por que você não deseja que o código seja modificado?

Segurança? Confiar em? Segredo comercial?

Então não envie o código, peça ao cliente para enviar uma solicitação e retornar um resultado. Talvez não seja um resultado privado ou privilegiado, apenas uma conclusão é suficiente para muitas UIs.

Como versões ligeiramente modificadas do seu próprio código estão prejudicando seus resultados?

Use um obscurecedor de código, mangler de nome e segmentos de código triviais.

Essas técnicas elevam a fasquia no nível de habilidade real e nas ferramentas necessárias para criar uma pequena variação do seu site. Esteja ciente de que essas técnicas podem tornar seu código mais lento, introduzir bugs e mensagens de erro interessantes e sem sentido e ainda assim podem ser superadas por alguém com as ferramentas e / ou habilidades certas. Então, considere realmente se vale a pena. No final do dia, alguém poderia realmente escrever o mesmo código.

Kain0_0
fonte