Wie kann ich verhindern, dass ein Benutzer meinen Code in seinem Browser bearbeitet?

11

Beschreibung

Ich entwerfe eine Node.JS-Anwendung (eher wie eine vollständige Website). Die App sendet fünf JavaScript-Dateien und verfügt über <script>Tags, die sie miteinander verknüpfen.

Frage

Wie kann ich verhindern, dass Benutzer und Angreifer meinen Code überprüfen und bearbeiten ?

  • Ein Beispiel wäre:

    • Ctrl+ Shift+I

    • In Devtools , GOTO Quellen , wählen Sie eine Datei zu bearbeiten (dh index.html) und Schreib Bearbeitungen

    • Durch Drücken von Ctrl+ Swird dazu führen , Live - Bearbeitung auftreten

Ich möchte verhindern , dass das obige Beispiel passiert ... Ist es möglich?


Folgendes dachte ich:

Ich werde eine weitere clientseitige JavaScript-Datei erstellen, Prevent_keys.js

Es wird auf Ctrl+ Shift+ hören I.

Wenn es zurückkehrt true(dh die Tasten wurden gedrückt), werden logdie Tasten angezeigt.

Dies hindert den Benutzer jedoch nicht daran, Devtools direkt zu verwenden.

Edwin Pratt
quelle
16
Sie können niemanden daran hindern, Ihr im Browser ausgeführtes Javascript zu sehen oder zu ändern. Kippen.
jfriend00
7
Nur weil die Antwort auf eine Frage "Sie können nicht" lautet, heißt das nicht, dass sie abgelehnt werden sollte.
RubberDuck
1
Sehr eng verwandte Frage: JavaScript nur Validierung auf AJAX-Formular senden . Schauen Sie sich insbesondere die akzeptierte Antwort mit ihrem trivialen Beispiel an, wie ein POST-Anruf an Ihren Server gesendet wird, der mit dem von Ihrem Client stammenden identisch ist, obwohl er nicht einmal von einem Webbrowser stammt.
8bittree

Antworten:

35

Sie können Benutzer buchstäblich nicht daran hindern, auf Inhalte zuzugreifen und diese zu ändern, die Sie ihnen senden. Sie haben keine Kontrolle über den Browser oder welchen Browser sie verwenden oder ob sie tatsächlich Ihren Quellcode über einen Browser herunterladen. Sie führen Ihren Code auf dem Gerät einer anderen Person aus. Sie sollten und können nichts über die Integrität dieses Geräts annehmen.

Wenn Sie Code haben, den Sie nicht verfügbar machen möchten, senden Sie ihn nicht an den Browser. Lassen Sie den Browser stattdessen eine Anfrage an einen Server senden, auf dem Sie den Geheimcode ausführen.

Überprüfen Sie als konkretes Beispiel keine Kennwörter auf dem Client. Der Client kann so geändert werden, dass dem Server immer mitgeteilt wird, dass das Kennwort korrekt ist. Stattdessen muss die Authentifizierung auf Ihrem vertrauenswürdigen Server erfolgen.

amon
quelle
4
"Der Client kann so geändert werden, dass dem Server immer mitgeteilt wird, dass das Kennwort korrekt ist." Husten libssh Husten
Philip Kendall
Danke vielmals! Ich habe Handler zum Anmelden, Abmelden und Anmelden gesendet. Ich habe es in Routen auf dem Server geändert.
Edwin Pratt
23

Das kannst du nicht. Eine der Grundregeln des Rechnens: Sie können dem Client nicht vertrauen . Egal an welches clevere Schema Sie denken, ich kann es umgehen, wenn ich die Kontrolle über den Kunden habe.

Philip Kendall
quelle
2
Ich habe alle Handler für Validierung, Hochladen, Herunterladen und userAccouts () in das Include des Servers verschoben.
Edwin Pratt
1
"Man kann dem Kunden nicht vertrauen" ist nur eine Seite der Medaille. Die andere Seite sagt: "Sie sind nicht der Eigentümer des Kunden". Der Browser, in dem Ihr Javascript ausgeführt wird, gehört nicht Ihnen, das Betriebssystem, in dem der Browser ausgeführt wird, gehört nicht Ihnen, und die Hardware, auf der der Browser ausgeführt wird, gehört nicht Ihnen. Was auch immer der Besitzer dieses Materials mit den Daten macht, die Sie an ihn senden, geht Sie nichts an . Es ist eine Frage des Respekts für Ihre Kunden, nicht zu versuchen, ihre Sachen an sich zu reißen.
cmaster
2

Warum soll der Code nicht geändert werden?

Sicherheit? Vertrauen? Handelsgeheimnis?

Senden Sie dann nicht den Code, lassen Sie den Client eine Anfrage senden und geben Sie ein Ergebnis zurück. Möglicherweise kein privates oder privilegiertes Ergebnis, für viele Benutzeroberflächen reicht es aus, nur ein Ergebnis zu erzielen.

Weil leicht modifizierte Versionen Ihres eigenen Codes Ihrem Endergebnis schaden?

Verwenden Sie einen Code-Obscurer, einen Name-Mangler und triviale Codesegmente.

Diese Techniken legen die Messlatte für das tatsächliche Können und die erforderlichen Werkzeuge höher, um eine geringfügige Variante Ihrer Website zu erstellen. Beachten Sie jedoch, dass diese Techniken Ihren Code verlangsamen, interessante und bedeutungslose Fehler und Fehlermeldungen verursachen und dennoch von jemandem mit den richtigen Tools und / oder Fähigkeiten überwunden werden können. Überlegen Sie also wirklich, ob sich das lohnt. Am Ende des Tages konnte jeder den gleichen Code schreiben.

Kain0_0
quelle