In den letzten Jahren hat JavaScript als plattformunabhängige Sprache eine breite Palette von Anwendungen gefunden, von mobilen Anwendungen über HTML5-basierte Spiele bis hin zu Node.js-Servern. Die Zeiten, in denen Sie JavaScript nur für Spezialeffekte und die Formularvalidierung verwendet haben, sind lange vorbei.
Diese Entwicklung eignet sich sowohl für Entwickler als auch für Verbraucher, die unabhängig von der Plattform, auf der sie sich gerade befinden, schnellere Updates für ihre Anwendungen erhalten.
Es wirft aber auch Fragen zur Sicherheit auf.
Wie können wir sicherstellen, dass unsere Anwendungen wie vorgesehen laufen? Wie setzen wir unsere Lizenzen durch? Und was ist mit Piraterie??
In diesem Lernprogramm werden die häufigsten Bedrohungen für Ihre JavaScript-Anwendungen beschrieben und wie Sie sich dagegen schützen können. Wir werden uns auch mit den Schritten befassen, wie Sie Jscrambler 4.0 zu einem Bestandteil Ihres Entwicklungsworkflows machen, um Ihre JavaScript-Anwendungen einfach zu schützen.
Da JavaScript meistens online verwendet wird, ist der natürliche Ausgangspunkt die Verbindung zwischen der auf den Geräten Ihrer Benutzer ausgeführten Anwendung und Ihrem Server.
Lassen Sie mich das zunächst aus dem Weg schaffen: Unabhängig davon, wie gut Sie den Schutz auf der Clientseite hinzufügen, müssen Sie immer davon ausgehen, dass der Client gefährdet werden kann. Einige gehen so weit zu sagen, dass Sie den Client als bösartig behandeln müssen.
Grund dafür ist, dass die HTTP-Kommunikation zwischen dem JavaScript-Client und Ihrem Server unabhängig von der Sicherheit Ihres Clients jederzeit mit Hilfe von Request-Sniffing-Tools oder sogar benutzerdefinierten Clients, die Ihren Client verwenden, manipuliert werden kann Serverprotokolle.
Wenn Ihre Anwendung also mit einem Server kommuniziert, bevor Sie eine andere Form der clientseitigen Sicherheit hinzufügen, sollten Sie Ihren Server so weit wie möglich sichern - genau wie bei einer normalen HTML-Schnittstelle.
Sie können sich über zwei Konzepte den Server sichern: Datenintegrität und Datenvertraulichkeit.
Datenintegrität bedeutet, dass die Daten in Ihrer Anwendung während des gesamten Lebenszyklus genau und konsistent bleiben sollen. Vertraulichkeit der Daten bedeutet, dass die Daten Ihrer Benutzer geschützt bleiben sollten und Dritte keinen Zugriff darauf erhalten sollten.
Während Sie die Parameterüberprüfung bereits im JavaScript-Client durchführen sollten, verhindert dies nicht, dass Hacker fehlerhafte oder sogar schädliche Daten an Ihren Server senden. Schließlich verwendet jemand, der Ihren Server beschädigen möchte, wahrscheinlich nicht einmal Ihre Benutzeroberfläche!
Wenn Sie also mit einer JavaScript-Anwendung arbeiten, gelten alle regulären serverseitigen Überprüfungen, von HTML-Zeichen mit Escape-Zeichen bis zur Überprüfung, ob Attribute den richtigen Typ aufweisen, weiterhin.
Manchmal sind die gesendeten Daten korrekt formatiert, aber im Status der Anwendung nicht sinnvoll - beispielsweise wenn ein Spieler eine unglaublich hohe Punktzahl abgibt. Sie können Ihren Server vor solchen Situationen schützen, indem Sie Sanity-Prüfungen verwenden und so viel Logik der Anwendung wie möglich auf dem Server platzieren.
Ein weiterer Teil der Absicherung der Client-Server-Kommunikation besteht darin, sicherzustellen, dass alle benutzerspezifischen Daten vertraulich bleiben und nur dem berechtigten Benutzer zugänglich ist.
Der erste Schritt ist die Verwendung von SSL in der gesamten Kommunikation zwischen Ihrem JavaScript-Client und Ihrem Server, um zu verhindern, dass andere Personen im Internet die zwischen ihnen übermittelten Daten ausspähen.
Als Nächstes müssen Sie überprüfen, ob die Anforderungen tatsächlich vom richtigen Benutzer stammen. Wie Sie dies am besten tun, hängt von Ihrer Anwendung ab. In webbasierten Anwendungen sind Nonces eine nützliche Technik, während die OAuth-Authentifizierung im Kontext eines Spiels eine natürlichere Vorgehensweise sein kann.
Denken Sie jedoch daran, dass Sie niemals vertrauliche Informationen wie Kennwörter oder API-Schlüssel in Ihrem Client speichern sollten. Sie sollten sich Ihren Server als eine API vorstellen, die vom JavaScript-Client, aber auch von anderen Clients im Internet verwendet werden kann.
Während die oben genannten Überprüfungen für jeden Anwendungstyp zutreffen, wird die Überprüfung einiger Komplexitäten schwierig, wenn dem Client mehr Komplexität hinzugefügt wird.
In Multiplayer-Spielen zum Beispiel funktioniert die gesamte Logik über Ihren Server, solange das Spiel einfach ist und Sie nur eine begrenzte Anzahl von Spielern haben. Wenn die aktive Benutzerbasis jedoch wächst, werden Sie aufgrund der Last auf dem Server die Möglichkeit in Betracht ziehen, einen Teil der Verarbeitung auf den Client zu verschieben. Das Gleiche passiert, wenn Ihre Spiellogik so komplex ist, dass die Simulation auf dem Server viele Ressourcen beanspruchen würde.
Hier verwischen sich die Grenzen.
Während der Gedanke, dem Client niemals zu vertrauen, gut klingt, müssen Sie in der Praxis einen Schwellenwert festlegen und sagen: "So vertraue ich meinem Client" und führen Sie nur Sicherheitsüberprüfungen auf dem Server durch. Wenn einige der Aktionen des Spielers auch andere Spieler betreffen, müssen Sie den Server mehr einbeziehen und die Stellen belassen, an denen der Benutzer nur seine eigenen Erfahrungen für den Client verwenden kann.
Und was ist mit den vielen JavaScript-Anwendungsfällen, in denen Sie keinen Server haben oder wo das Platzieren der Anwendungslogik auf dem Server nicht sinnvoll ist, wie mobile Apps, HTML5-Streaming-Player und Kartenanwendungen?
Schließlich ist es gut zu bedenken, dass Ihr JavaScript-Client, unabhängig davon, wie gut Sie Ihren Server schützen, immer verfügbar ist. Wenn Sie also keinen Schutz hinzufügen, ist es für einen Angreifer (z. B. Man-in-the-Browser- oder Datenexfiltrationsangriffe) sehr einfach, auf sensible Daten zuzugreifen oder die Benutzererfahrung zu ändern.
Als dynamische Sprache kann JavaScript im Browser mit grundlegenden Tools wie dem integrierten Debugger des Browsers geändert werden. Wenn Sie wissen, was Sie tun, können Sie Teile des Codes ersetzen und das Verhalten der Anwendung im laufenden Betrieb ändern.
Wie wir oben gesehen haben, sollten Sie sicherstellen, dass ungültige Daten niemals in die Datenbank Ihres Servers gelangen. Einige Änderungen sind jedoch eingeschränkter. Ein Malware-Plugin fügt möglicherweise Ihrer Anwendung neue Schaltflächen hinzu, um den Benutzer auf eine externe Site zu locken. Oder der Benutzer hackt den Client, um mehr von dem Spiel zu sehen, ohne es zu spielen.
Änderungen wie diese beeinträchtigen Ihre gesamte Anwendung nicht, ändern jedoch die Art und Weise, wie der Benutzer sie erlebt. Bei Malware kann dies auch die Privatsphäre des Benutzers ernsthaft gefährden.
Da JavaScript eine interpretierte Sprache ist, kann dies nicht vollständig verhindert werden. Ein engagierter Hacker wird immer einen Weg finden, an den Hindernissen vorbeizukommen, so wie ein Einbrecher jedes Schloss brechen kann. Aber wir können den Einbruch so schwer machen, dass die meisten Benutzer die richtigen Methoden verwenden (z. B. gute Kenntnisse im Spiel), anstatt die Anwendung zu hacken.
Hier kann Jscrambler Ihnen helfen.
Jscrambler ist eine JavaScript-Sicherheitsplattform, die sicherstellen soll, dass JavaScript-Anwendungen so ausgeführt werden, wie sie entwickelt wurden.
Um Jscrambler auszuprobieren, besuchen Sie die Homepage und melden Sie sich für eine kostenlose Testversion an. Wenn Sie feststellen, dass es Ihren Erwartungen entspricht, können Sie sich später eines seiner bezahlten Pläne aussuchen.
Wenn angemeldet, wenn ein Text steht "Eine neue Version von Jscrambler ist jetzt verfügbar" Am oberen Rand der Seite sehen Sie immer noch die alte Version. Klicke auf Versuchen Sie es jetzt.
Jscrambler 4 organisiert Ihre Arbeit in Anwendungen, von denen jede aus einer oder mehreren JavaScript-Dateien bestehen kann. Als Nächstes sehen Sie den Bildschirm zum Auswählen der Anwendung, an der gearbeitet werden soll.
Wenn Sie die Funktionalität mit einer eigenen JavaScript-Anwendung testen möchten, klicken Sie auf App erstellen.
Im Moment wollen wir uns entscheiden Spielplatz. In diesem Modus können Sie alle Umwandlungen an einem Beispielskript testen, während die Umwandlungen, die Sie auf Ihre tatsächliche Anwendung anwenden können, durch Ihre Abonnementstufe begrenzt sind.
Links sehen Sie die Dateibaum, eine Liste der Dateien in Ihrer Anwendung und eine Hinzufügen Schaltfläche zum Importieren oder Erstellen neuer Dateien. Auf dem Spielplatz ist die Schaltfläche Hinzufügen deaktiviert.
Auf der rechten Seite gibt es ein Menü zur Auswahl der Sprachspezifikationen und Anwendungsmodus für deine App. Jscrambler verwendet sie, um sicherzustellen, dass der umgewandelte Code in Ihrer ausgewählten Umgebung funktioniert, wobei dessen Einschränkungen und Möglichkeiten berücksichtigt werden.
Wir gehen jetzt mit ES5 und eine grundlegende Webbrowser-App.
Klicken Sie auf den Dateinamen (clock.js
) um daran zu arbeiten.
Der Inhalt der Datei wird in der Mitte des Bildschirms angezeigt: Links der Quellcode und rechts von Jscrambler transformierte Version.
Als nächstes wählen Sie die Code-Transformationen Registerkarte rechts, um eine Liste der verfügbaren Transformationen anzuzeigen. Mit Jscrambler können Sie die für Ihren Code relevanten Transformationen auswählen. Sie können sogar Anmerkungen in Ihrem Code verwenden, um die Art und Weise zu ändern, wie der Code umgewandelt wird. Dies kann bei leistungskritischen Codeblöcken hilfreich sein, beispielsweise beim Rendern von Funktionen in Spielen.
Wählen Sie die Transformationen einzeln aus, um sie zu testen. Dann klicken Sie auf App schützen am unteren Rand des Fensters, um eine neue Version Ihres transformierten Codes zu erstellen.
Neben der Schaltfläche wird eine Anzeige angezeigt, die die Auswirkungen dieser Änderungen in Ihrem JavaScript-Code darstellt.
Im Messgerät werden drei Symbole angezeigt, die die Kosten, die Belastbarkeit und die Wirksamkeit (von links nach rechts im Screenshot oben) der für Ihre Anwendung ausgewählten Transformationen darstellen.
Aktivieren Sie zunächst das Kontrollkästchen vor Kontrollfluss, und klicken Sie dann auf App schützen.
Das Steuerflussabflachung ist eine der leistungsstarken neuen Transformationen, die in Jscrambler 4 hinzugefügt wurde. Dadurch wird der Steuerungsfluss des Skripts flacher, sodass es für eine Person, die den Code liest, schwierig wird, der Logik Ihrer Anwendung zu folgen.
Fahren Sie dann fort, indem Sie einige weitere Verschleierungsoptionen auswählen. Wenn Sie mehr hinzufügen, werden Sie feststellen, dass Ihr Code immer schwieriger zu lesen und zu bearbeiten ist, ohne die Funktionalität zu beeinträchtigen.
Auch wenn Sie auf klicken App schützen Auch wenn Sie die Einstellungen nicht ändern, werden Sie feststellen, dass sich der Inhalt des geschützten Skripts jedes Mal ändert.
Jscramblers Transformationen sind polymorph, Stellen Sie sicher, dass die Transformationen jedes Mal eine andere Ausgabe erzeugen. Auf diese Weise würden diese Änderungen selbst dann nicht mehr funktionieren, wenn jemand die aktuelle Version hacken konnte, wenn Sie Ihren Code das nächste Mal über Jscrambler ausführen.
Bisher haben wir über Möglichkeiten gesprochen, um sicherzustellen, dass Ihre Anwendung wie erwartet funktioniert, indem sowohl Benutzer als auch Außenstehende daran gehindert werden, Ihren Quellcode zu ändern. Aber das ist nicht die einzige Bedrohung für Ihre Anwendung, um die Sie sich Sorgen machen müssen.
Da JavaScript in eigenständigen und mobilen Anwendungen immer beliebter wird, ist Piraterie auch in diesem Bereich zu einem echten Problem geworden.
Ich bin sicher, wir haben alle geklickt "Quelltext anzeigen" um zu lernen, wie man einen coolen neuen Effekt oder Trick ausführt und das Gelernte an unsere Websites anpasst. Darüber spreche ich hier nicht.
Nehmen wir stattdessen an, Sie haben ein beliebtes Handyspiel in HTML5 und JavaScript erstellt. Dank der Portabilität von JavaScript können Sie den gleichen Code auf Android-, iOS- und anderen Plattformen verwenden und eine größere Zielgruppe erreichen, ohne dass Sie dafür extra native Versionen für jede Umgebung erstellen müssen. Es gibt jedoch ein Problem: Jeder kann Ihren JavaScript-Code kopieren, einige Änderungen vornehmen und ihn als seinen eigenen verkaufen!
Die Transformationen im vorherigen Schritt verhindern dies, indem der Code schwer lesbar und zurückentwickelt wird. Darüber hinaus fügt Jscrambler Code-Traps hinzu, eine Funktionalität, die den Code selbst schützt.
Werfen wir einen Blick auf einige von ihnen.
In Jscrambler finden Sie in der Liste der Transformationen einen Abschnitt mit dem Titel Code-Sperren.
Die Transformationen in diesem Abschnitt fügen Ihrer JavaScript-Anwendung eine weitere Sicherheitsebene hinzu.
Mit ihnen können Sie die Ausführung Ihres Codes auf eine bestimmte Gruppe von Browsern, einen Zeitrahmen (nützlich für Demos, die nach Ablauf des Vorschauzeitraums nicht lauffähig sein sollten), für eine bestimmte Domäne (normalerweise Ihre) und ein bestimmtes Betriebssystem.
Eine leistungsfähigere Funktion zum Schutz Ihres Codes ist die clientseitige RASPEL (Runtime Application Self-Protection). Es ändert Ihren JavaScript-Code, sodass er sich selbst vor Laufzeitmanipulationen wehrt. Die Anwendung funktioniert beispielsweise nicht mehr, wenn jemand versucht, den Debugger zu öffnen.
Zum Schluss im Optimierung Abschnitt auswählen Minifizierung um den Code zu verkleinern und die Datei zu verkleinern.
Klicken Sie dann auf App schützen, gefolgt von Lade App herunter um den Quellcode herunterzuladen und in Ihrer Anwendung zu verwenden.
Jscrambler verfolgt den Transformationsverlauf, sodass Sie immer zu einer früheren Version zurückkehren können.
Wie Sie gesehen haben, ist das Konfigurieren Ihres Schutzniveaus durch Auswahl der Kontrollkästchen nacheinander unkompliziert. Sie können Ihren Workflow jedoch noch beschleunigen, indem Sie Ihre üblichen Kombinationen von Transformationen in Vorlagen zusammenfassen.
Wenn Sie eine Gruppe von Transformationen gefunden haben, die Sie für die zukünftige Verwendung speichern möchten, klicken Sie auf Vorlage erstellen am unteren Rand der Anwendungseinstellungen Sektion.
Jscrambler fordert Sie auf, Ihrer Vorlage einen Namen und eine Beschreibung zu geben.
Geben Sie etwas Beschreibendes für die Zukunft ein und klicken Sie auf Vorlage speichern.
Sie können auch eine der bereits vorhandenen Vorlagen verwenden Ihre Vorlagen Tab:
Bewegen Sie den Mauszeiger über die Vorlagennamen, um mehr über sie zu erfahren und zu verstehen, wann sie Sinn machen. Klicken Sie dann auf sie, um zu sehen, welche Umwandlungen sie auf Ihren Code anwenden.
Bisher haben wir einige Möglichkeiten aufgezeigt, wie Jscrambler Ihnen helfen kann, Ihre Anwendung über die Web-Benutzeroberfläche zu schützen. Während die Benutzeroberfläche intuitiv ist und Ihre Anwendung wächst, möchten Sie etwas unkomplizierter.
Wie bereits erwähnt, ist Jscrambler polymorph und generiert jedes Mal eine andere Ausgabe. Daher ist es nützlich, das Tool ab und zu erneut auszuführen, auch wenn keine Änderungen an den spezifischen Dateien vorgenommen werden.
Sehen wir uns dazu das Befehlszeilentool von Jscrambler an.
Laden Sie zunächst das Befehlszeilenprogramm mit npm herunter und installieren Sie es. Geben Sie in Ihre Befehlszeile Folgendes ein:
sudo npm install -g jscrambler
Wenn die Installation abgeschlossen ist, kehren Sie zu Ihren Anwendungen im Jscrambler-Administrator zurück.
Beachten Sie, dass Sie zur Verwendung des Befehlszeilentools anstelle des Spielplatz-Skripts eine tatsächliche Anwendung verwenden müssen. Wenn Sie noch keine Anwendung haben, erstellen Sie jetzt eine.
Klicken Sie nach der Auswahl der Transformationen, die Sie anwenden möchten, auf die Schaltfläche "Download" in der oberen rechten Ecke der Seite. Dadurch werden Ihre Einstellungen als JSON-Datei auf Ihren Computer heruntergeladen.
Kopieren Sie die JSON-Datei in Ihr Projekt. Übernehmen Sie die Versionskontrolle nicht, da die Datei Ihren API-Schlüssel und das Geheimnis für die Verwendung der Jscrambler-API enthält.
Dann führe das aus jscrambler
Befehl, um die Transformationen in Ihren JavaScript-Dateien auszuführen.
Zum Beispiel, wenn Sie nur eine Datei haben, test.js
, Sie können den folgenden Befehl ausführen:
$ jscrambler -c jscrambler.json -o test.protected.js test.js
In dem Befehl haben Sie die JSON-Datei, die Ihre Anwendungseinstellungen enthält, mithilfe von übergeben -c
Parameter, gefolgt von der Ausgabedatei (-o test.protected.js
) und schließlich die zu schützende JavaScript-Datei.
Um den Schutz für alle JavaScript-Dateien im Projektverzeichnis auszuführen, können Sie Folgendes verwenden:
$ jscrambler -c jscrambler.json -o geschützt / ** / *. js
In diesem Beispiel definieren Sie anstelle einer Ausgabedatei ein Verzeichnis (geschützt
) wo Jscrambler die Ergebnisse des Schutzes platziert.
Jetzt müssen Sie nicht jedes Mal wieder zur Web-Benutzeroberfläche von Jscrambler wechseln, wenn Sie Änderungen an Ihren JavaScript-Dateien vornehmen. Dies macht es wahrscheinlicher, dass Sie sich an den Schritt erinnern und somit Ihre Anwendung sicher halten.
Als weitere Verbesserung können Sie die Jscrambler-Task auch so einrichten, dass sie bei Änderungen in Ihren Skripts ausgeführt wird, z. B. mithilfe von Grunt. Oder es ist sogar eine Aufgabe auf Ihrem Continuous Integration Server, die immer dann ausgeführt wird, wenn eine neue Version des Codes festgeschrieben wird.
Jscrambler bietet modernste Tools, mit denen Cracker, Betrüger und Malware unerwünschte Funktionen in Ihre Anwendung einschleusen oder die Variablen Ihrer Anwendung ändern können. Es macht es auch für andere schwierig, Ihren Code zu kopieren und als seinen eigenen umzuverteilen.
Sicherheit ist ein komplexes Gebiet, bei dem verschiedene Bedrohungen zu berücksichtigen sind. Wenn Ihr JavaScript-Code also mit einem Server kommuniziert, ist die beste Lösung die Verwendung einer Kombination aus bewährten Methoden für die Serverentwicklung, einer robusten Parameterüberprüfung und einer JavaScript-Sicherheitsplattform wie Jscrambler, um den Client manipulationssicher zu machen. Auf diese Weise können Sie die meisten Angriffe auf die Integrität Ihrer Anwendung bereits im Client verhindern und sicherstellen, dass Ihre Kunden die Erfahrung erhalten, die Sie für sie entwickelt haben.
Jscrambler kann Ihnen auch dabei helfen, Man-in-the-Browser-Angriffe und -Betrug, Bots, 0-Tage-Bedrohungen und APT (Advanced Persistent Threats) zu überwinden, indem Sie Änderungen am DOM feststellen und Ihnen alle erforderlichen Informationen zur Verfügung stellen stoppen Sie diese Angriffe. Weitere Informationen erhalten Sie unter [email protected].
Weitere Informationen zu Jscrambler, seinen neuen Funktionen und den neuesten Updates finden Sie auch auf der Jscrambler-Website.