Comment empêcher un utilisateur de modifier mon code dans son navigateur?

11

La description

Je conçois une application Node.JS (plus comme un site Web complet). L'application enverra cinq fichiers JavaScript et aura des <script>balises les reliant entre eux.

Question

Comment empêcher les utilisateurs et les attaquants de regarder et de modifier mon code ?

  • Un exemple serait:

    • Ctrl+ Shift+I

    • Dans Devtools , allez aux sources , sélectionnez un fichier à éditer (ie index.html) et écrivez les éditions

    • En appuyant sur Ctrl+ S, l' édition en direct se produira

Je voudrais empêcher l' exemple ci-dessus de se produire ... Est-ce possible?


Voici ce que je pensais:

Je vais créer un autre fichier JavaScript côté client, prevent_keys.js

Il écoutera Ctrl+ Shift+ I.

S'il revient true(c'est-à-dire que les touches ont été enfoncées), ce seront logles touches.

Cependant, cela n'empêchera pas l'utilisateur d'utiliser directement Devtools.

Edwin Pratt
la source
16
Vous ne pouvez empêcher personne de voir ou de modifier votre javascript qui s'exécute dans le navigateur. Je ne peux pas.
jfriend00
7
Ce n'est pas parce que la réponse à une question est «Vous ne pouvez pas» que cela devrait être rétrogradé.
RubberDuck
1
Question très proche: validation JavaScript uniquement sur le formulaire AJAX . Vérifiez en particulier la réponse acceptée avec son exemple trivial de la façon d'envoyer un appel POST qui, sur votre serveur, semble identique à celui qui provient de votre client, même s'il ne provient même pas d'un navigateur Web.
8bittree

Réponses:

35

Vous ne pouvez littéralement pas empêcher les utilisateurs d'accéder au contenu que vous leur envoyez et de le modifier. Vous n'avez aucun contrôle sur le navigateur, ni sur le navigateur qu'ils utilisent, ni sur le fait qu'ils téléchargent en fait votre code source via un navigateur. Vous exécutez votre code sur l'appareil d'une autre personne. Vous ne devez et ne pouvez rien supposer de l'intégrité de cet appareil.

Si vous avez du code que vous ne voulez pas exposer, ne l'envoyez pas au navigateur. Au lieu de cela, laissez le navigateur envoyer une demande à un serveur sur lequel vous exécutez le code secret.

À titre d'exemple concret, ne vérifiez pas les mots de passe sur le client. Le client peut être modifié pour toujours dire au serveur «le mot de passe était correct». Au lieu de cela, l'authentification doit avoir lieu sur votre serveur de confiance.

amon
la source
4
"Le client pourrait être modifié pour toujours dire au serveur" le mot de passe était correct "." toux libssh toux
Philip Kendall
Merci beaucoup! J'envoyais des gestionnaires pour la connexion, la déconnexion et l'inscription. Je l'ai changé en itinéraires sur le serveur.
Edwin Pratt
23

Tu ne peux pas. L'une des règles fondamentales de l'informatique: vous ne pouvez pas faire confiance au client . Quel que soit le schéma intelligent auquel vous pensez, je peux le contourner si je contrôle le client.

Philip Kendall
la source
2
J'ai déplacé tous les gestionnaires de validation, de téléchargement, de téléchargement et de userAccouts () vers le serveur.
Edwin Pratt
1
"Vous ne pouvez pas faire confiance au client" n'est qu'un côté de la médaille. L'autre côté dit: "Vous n'êtes pas le propriétaire du client". Le navigateur qui exécute votre javascript n'est pas le vôtre, le système d'exploitation qui exécute le navigateur n'est pas le vôtre et le matériel sur lequel le navigateur s'exécute n'est pas le vôtre. Quel que soit le propriétaire de ces informations avec les données que vous leur envoyez, cela ne vous regarde pas . C'est une question de respect pour vos clients de ne pas essayer d'usurper leurs affaires.
cmaster - réintègre monica
2

Pourquoi ne voulez-vous pas que le code soit modifié?

Sécurité? Confiance? Secret de commerce?

Ensuite, n'envoyez pas le code, demandez au client d'envoyer une demande et renvoyez un résultat. Peut-être pas un résultat privé ou privilégié, juste un fait est suffisant pour de nombreuses interfaces utilisateur.

Parce que des versions légèrement modifiées de votre propre code nuisent à vos résultats?

Utilisez un obscurcisseur de code, un gestionnaire de noms et des segments de code triviaux.

Ces techniques élèvent la barre du niveau de compétence réel et des outils nécessaires pour créer une légère variante de votre site Web. Sachez simplement que ces techniques peuvent ralentir votre code, introduire des bogues et des messages d'erreur intéressants et dénués de sens, tout en pouvant être surmontées par quelqu'un avec les bons outils et / ou les bonnes compétences. Alors considérez vraiment si cela en vaut la peine. À la fin de la journée, n'importe qui pouvait simplement écrire le même code.

Kain0_0
la source