webentwicklung-frage-antwort-db.com.de

Wie kann ich JavaScript verschleiern (schützen)?

Ich möchte eine JavaScript-Anwendung erstellen, die nicht Open Source ist, und möchte daher wissen, wie ich meinen JS-Code verschleiern kann. Ist das möglich?

695
Teifion

Verschleierung:

Versuchen Sie YUI Compressor . Es ist ein sehr beliebtes Tool, das vom Yahoo UI-Team entwickelt, verbessert und gewartet wird.

Sie können auch verwenden:

Private String-Daten:

Die Geheimhaltung von Zeichenfolgenwerten ist ein anderes Problem, und die Verschleierung ist nicht wirklich von Vorteil. Wenn Sie Ihre Quelle in ein verstümmeltes, minimiertes Chaos packen, erhalten Sie natürlich eine leichte Version von Sicherheit bis Dunkelheit . In den meisten Fällen ist es Ihr Benutzer, der die Quelle anzeigt, und die Zeichenfolgenwerte auf dem Client sind für deren Verwendung vorgesehen, sodass eine Art privater Zeichenfolgenwert nicht häufig erforderlich ist.

Wenn Sie wirklich einen Wert hätten, den ein Benutzer niemals sehen sollte, hätten Sie mehrere Möglichkeiten. Zunächst können Sie eine Art Verschlüsselung durchführen, die beim Laden der Seite entschlüsselt wird. Das wäre wahrscheinlich eine der sichersten Optionen, aber auch eine Menge Arbeit, die möglicherweise unnötig ist. Sie könnten wahrscheinlich mit base64 einige Zeichenfolgenwerte codieren, und das wäre einfacher. Aber jemand, der diese Zeichenfolgenwerte wirklich haben wollte, konnte sie leicht decodieren . Die Verschlüsselung ist die einzige Möglichkeit, den Zugriff auf Ihre Daten zu verhindern, und die meisten Menschen sind der Meinung, dass dies mehr Sicherheit bedeutet, als sie benötigen.

Nebenbemerkung:

Es ist bekannt, dass die Verschleierung in Javascript einige Fehler verursacht. Die Obfuscators werden ein bisschen besser, aber viele Outfits sind der Meinung, dass sie genug davon haben, wenn sie und gzipping minimieren zusätzliche Einsparungen bei der Verschleierung sind nicht immer die Mühe wert . Wenn Sie versuchen, Ihre Quelle zu schützen, entscheiden Sie sich vielleicht dafür, dass es sich lohnt, Ihren Code nur zu erschweren, um ihn zu lesen. JSMin ist eine gute Alternative.

401
keparo

Ich bin überrascht, dass niemand Googles Closure Compiler erwähnt hat. Es wird nicht nur minimiert/komprimiert, es wird analysiert, um nicht verwendeten Code zu finden und zu entfernen, und es wird neu geschrieben, um eine maximale Minimierung zu erreichen. Es kann auch die Typüberprüfung durchführen und warnt vor Syntaxfehlern.

JQuery hat kürzlich von YUI Compresser zu Closure Compiler gewechselt und ein " solide Verbesserung " festgestellt.

134
Jason Hall

Verschleierung kann nie wirklich funktionieren. Für alle, die wirklich auf Ihren Code zugreifen möchten, ist es nur eine Geschwindigkeitsüberschreitung. Schlimmer noch, es hindert Ihre Benutzer daran, Fehler zu beheben (und die Fehlerbehebungen an Sie zurückzusenden), und es erschwert Ihnen, Probleme vor Ort zu diagnostizieren. Es ist eine Verschwendung von Zeit und Geld.

Sprechen Sie mit einem Anwalt über das Recht des geistigen Eigentums und Ihre rechtlichen Möglichkeiten. "Open Source" bedeutet nicht "Leute können die Quelle lesen". Stattdessen handelt es sich bei Open Source um ein bestimmtes Lizenzmodell, das die Erlaubnis erteilt, Ihren Code frei zu verwenden und zu ändern. Wenn Sie eine solche Lizenz nicht gewähren, verstoßen die Leute, die Ihren Code kopieren, gegen diese und (in den meisten Ländern der Welt) haben Sie rechtliche Möglichkeiten, sie zu stoppen.

Die einzige Möglichkeit, Ihren Code wirklich zu schützen, besteht darin, ihn nicht zu versenden. Verschieben Sie den wichtigen Code serverseitig und lassen Sie Ihren öffentlichen Javascript-Code Ajax-Aufrufe ausführen.

Siehe meine vollständige Antwort zu Verschleierungsmitteln hier.

113
Schwern

Sie können die JavaScript-Quelle nach Belieben verschleiern, sie kann jedoch immer rückentwickelt werden, da der gesamte Quellcode tatsächlich auf dem Client-Computer ausgeführt werden muss Mit serverseitigem Code und dem gesamten Client-Code, den Javascript ausführt, werden Anforderungen zur Verarbeitung an den Server selbst gesendet. Andernfalls kann jeder jederzeit alle Vorgänge verfolgen, die der Code ausführt.

Jemand hat base64 erwähnt, um die Sicherheit von Strings zu gewährleisten. Das ist eine schreckliche Idee. Base64 ist sofort für die Personen erkennbar, die Ihren Code zurückentwickeln möchten. Das erste, was sie tun werden, ist es zu entschlüsseln und zu sehen, was es ist.

49
Claudiu

Es gibt eine Reihe von JavaScript-Verschleierungstools, die frei verfügbar sind. Ich denke jedoch, dass es wichtig ist zu beachten, dass es schwierig ist, JavaScript so zu verschleiern, dass es nicht mehr rückentwickelt werden kann.

Zu diesem Zweck gibt es mehrere Optionen, die ich in gewissem Maße über die Zeit hinaus genutzt habe:

  • YUI-Kompressor . Der JavaScript-Kompressor von Yahoo! kann den Code gut komprimieren, um die Ladezeit zu verkürzen. Es gibt eine kleine Verschleierungsebene, die relativ gut funktioniert. Im Wesentlichen ändert Compressor Funktionsnamen, entfernt Leerzeichen und ändert lokale Variablen. Das benutze ich am häufigsten. Dies ist ein Open Source Java-basiertes Tool.

  • JSMin ist ein Tool von Douglas Crockford, das versucht, Ihre JavaScript-Quelle zu minimieren. In Crockfords eigenen Worten: "JSMin verschleiert nicht, aber es hässlich." Das Hauptziel ist es, die Größe Ihrer Quelle für ein schnelleres Laden in Browsern zu minimieren.

  • Free JavaScript Obfuscator . Dies ist ein webbasiertes Tool, das versucht, Ihren Code zu verschleiern, indem es ihn tatsächlich codiert. Ich denke, dass die Kompromisse bei der Form der Codierung (oder Verschleierung) auf Kosten der Dateigröße gehen könnten. Dies ist jedoch eine Frage der persönlichen Präferenz.

45
Tom

Was ich tun würde:

A. Troll den Hacker!

Dies wird im zweiten Teil mein gefälschter/verschleierter geheimer Javascript-Code LAUNCHER sein. Die, die Sie im Quellcode sehen.

Was bedeutet dieser Code?

  1. lädt den realen Code
  2. setzt einen benutzerdefinierten Header
  3. sendet eine benutzerdefinierte Variable

var ajax=function(a,b,d,c,e,f){
 e=new FormData();
 for(f in d){e.append(f,d[f]);};
 c=new XMLHttpRequest();
 c.open('POST',a);
 c.setRequestHeader("Troll1","lol");
 c.onload=b;
 c.send(e);
};
window.onload=function(){
 ajax('Troll.php',function(){
  (new Function(atob(this.response)))()
 },{'Troll2':'lol'});
}

B. Verschleiern Sie den Code ein wenig

Was ist das?

  1. das ist derselbe Code wie oben in base64
  2. dies ist nicht der SECRET-Javascript-Code

(new Function(atob('dmFyIGFqYXg9ZnVuY3Rpb24oYSxiLGQsYyxlLGYpe2U9bmV3IEZvcm1EYXRhKCk7Zm9yKGYgaW4gZCl7ZS5hcHBlbmQoZixkW2ZdKTt9O2M9bmV3IFhNTEh0dHBSZXF1ZXN0KCk7Yy5vcGVuKCdQT1NUJyxhKTtjLnNldFJlcXVlc3RIZWFkZXIoIlRyb2xsMSIsImxvbCIpO2Mub25sb2FkPWI7Yy5zZW5kKGUpO307d2luZG93Lm9ubG9hZD1mdW5jdGlvbigpe2FqYXgoJ1Ryb2xsLnBocCcsZnVuY3Rpb24oKXsgKG5ldyBGdW5jdGlvbihhdG9iKHRoaXMucmVzcG9uc2UpKSkoKX0seydUcm9sbDInOidsb2wnfSk7fQ==')))()

C Erstellen Sie eine schwer anzuzeigende PHP-Datei mit dem echten Code darin

Was macht dieser PHP-Code?

  1. Sucht nach dem richtigen Referrer (Domain/Verzeichnis/Code Ihres Launchers)
  2. Prüft auf den benutzerdefinierten HEADER
  3. Prüft auf die benutzerdefinierte POST -Variable

Wenn alles in Ordnung ist, zeigt es Ihnen den richtigen Code, sonst einen gefälschten Code oder eine verbotene IP, Seite schließen ... was auch immer.

<?php
$t1=Apache_request_headers();
if(base64_encode($_SERVER['HTTP_REFERER'])=='aHR0cDovL2hlcmUuaXMvbXkvbGF1bmNoZXIuaHRtbA=='&&$_POST['Troll2']=='lol'&&$t1['Troll1']='lol'){
 echo 'ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSkuaW5uZXJUZXh0PSdBd2Vzb21lJzsNCg==';//here is the SECRET javascript code
}else{
 echo 'd2luZG93Lm9wZW4oJycsICdfc2VsZicsICcnKTt3aW5kb3cuY2xvc2UoKTs=';
};
?>

base64 referrer = http://here.is/my/launcher.html

SECRET javascript = document.body.appendChild(document.createElement('div')).innerText='Awesome';

FAKE = window.open('', '_self', '');window.close();

Nun, wenn Sie Event-Handler im SECRET-Javascript definieren, ist es wahrscheinlich zugänglich. Sie müssen sie außerhalb mit dem Launchcode definieren und auf eine verschachtelte SECRET-Funktion verweisen.

SO ... gibt es einen einfachen Weg, um den Code zu bekommen? document.body.appendChild(document.createElement('div')).innerText='Awesome';

Ich bin nicht sicher, ob dies funktioniert, aber ich verwende chrome und habe Elemente, Ressourcen, Netzwerk, Quellen, Zeitleiste, Profile, Audits ausgewählt, aber die obige Zeile wurde nicht gefunden.

note1: Wenn du die Troll.php-URL in Inspect element-> network in chrome öffnest, erhältst du den gefälschten Code.

anmerkung 2: Der gesamte Code ist für moderne Browser geschrieben. polyfill benötigt viel mehr code.

BEARBEITEN

launcher.html

<!doctype html><html><head><meta charset="utf-8"><title></title><script src="data:application/javascript;base64,KG5ldyBGdW5jdGlvbihhdG9iKCdkbUZ5SUdGcVlYZzlablZ1WTNScGIyNG9ZU3hpTEdRc1l5eGxMR1lwZTJVOWJtVjNJRVp2Y20xRVlYUmhLQ2s3Wm05eUtHWWdhVzRnWkNsN1pTNWhjSEJsYm1Rb1ppeGtXMlpkS1R0OU8yTTlibVYzSUZoTlRFaDBkSEJTWlhGMVpYTjBLQ2s3WXk1dmNHVnVLQ2RRVDFOVUp5eGhLVHRqTG5ObGRGSmxjWFZsYzNSSVpXRmtaWElvSWxSeWIyeHNNU0lzSW14dmJDSXBPMk11YjI1c2IyRmtQV0k3WXk1elpXNWtLR1VwTzMwN2QybHVaRzkzTG05dWJHOWhaRDFtZFc1amRHbHZiaWdwZTJGcVlYZ29KMVJ5YjJ4c0xuQm9jQ2NzWm5WdVkzUnBiMjRvS1hzZ0tHNWxkeUJHZFc1amRHbHZiaWhoZEc5aUtIUm9hWE11Y21WemNHOXVjMlVwS1Nrb0tYMHNleWRVY205c2JESW5PaWRzYjJ3bmZTazdmUT09JykpKSgp"></script></head><body></body></html>

Troll.php

<?php $t1=Apache_request_headers();if(/*base64_encode($_SERVER['HTTP_REFERER'])=='PUT THE LAUNCHER REFERER HERE'&&*/$_POST['Troll2']=='lol'&&$t1['Troll1']='lol'){echo 'ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSkuaW5uZXJUZXh0PSdBd2Vzb21lJzsNCg==';}else{echo 'd2luZG93Lm9wZW4oJycsICdfc2VsZicsICcnKTt3aW5kb3cuY2xvc2UoKTs=';}; ?>
22
cocco

Versuchen Sie JScrambler . Ich habe es kürzlich ausprobiert und war beeindruckt. Es bietet eine Reihe von Vorlagen zur Verschleierung mit vordefinierten Einstellungen für diejenigen, die sich nicht sonderlich für Details interessieren und diese nur schnell erledigen möchten. Sie können auch eine benutzerdefinierte Verschleierung erstellen, indem Sie die gewünschten Transformationen/Techniken auswählen.

18
Anthony

Im Gegensatz zu den meisten anderen Antworten, die ich gegen YUI Compressor vorschlage; Sie sollten Google Closure verwenden.

Nicht viel, weil es mehr komprimiert, sondern vor allem, weil es Javascript-Fehler wie a = [1,2,3,]; abfängt, die IE verrückt machen.

17
Thomas Bonini

Das Problem bei interpretierten Sprachen besteht darin, dass Sie den Quellcode senden, damit sie funktionieren (es sei denn, Sie haben einen Compiler für Bytecode, aber andererseits ist das Dekompilieren ziemlich trivial).

Wenn Sie also nicht auf Leistung verzichten möchten, können Sie nur auf Variablen- und Funktionsnamen reagieren, z. Ersetzen Sie sie durch a, b ... aa, ab ... oder a101, a102 usw. Und entfernen Sie natürlich so viel Leerzeichen/Zeilenumbrüche wie möglich (das tun sogenannte JS-Kompressoren).
Verschleierte Zeichenfolgen haben einen Leistungseinbruch, wenn Sie sie in Echtzeit verschlüsseln und entschlüsseln müssen. Außerdem kann ein JS-Debugger die endgültigen Werte anzeigen ...

17
PhiLho

Eine nicht auf Open Source basierende Javascript-Anwendung ist ziemlich albern. Javascript ist eine clientseitig interpretierte Sprache. Verschleierung ist kein großer Schutz.

JS-Verschleierung wird normalerweise durchgeführt, um die Größe des Skripts zu reduzieren, anstatt es zu "schützen". Wenn Sie in einer Situation sind, in der Ihr Code nicht öffentlich sein soll, ist Javascript nicht die richtige Sprache.

Es gibt viele Tools, aber die meisten haben aus einem bestimmten Grund das Wort "Compressor" (oder "Minifier") im Namen.

13
dbr

Ich kann empfehlen JavaScript Utility von Patrick J. O'Neil. Es kann verschleiern/verdichten und komprimieren und scheint ziemlich gut darin zu sein. Trotzdem habe ich nie versucht, es in irgendein Build-Skript zu integrieren.

Was das Verschleiern oder Minimieren angeht, bin ich kein großer Fan von ersteren. Es macht das Debuggen unmöglich (Fehler in Zeile 1 ... "Warte, es gibt nur eine Zeile") und sie brauchen immer Zeit zum Auspacken. Aber wenn Sie müssen ... na ja.

11

Sie können den clientseitigen Code nicht sichern: Drücken Sie einfach F12 in Google Chrome, halten Sie die JavaScript-Ausführung an , und Sie erhalten alle Zeichenfolgen, auch die verschlüsselten. Verschönern it und Variablen umbenennen und Sie erhalten fast den Originalcode.

Wenn Sie serverseitiges Javascript (z. B. NodeJS) schreiben, weil Sie Angst haben, dass jemand in Ihren Server eindringt, und Sie möchten, dass der Hacker schwieriger arbeitet, damit Sie mehr Zeit haben, um wieder auf den Server zuzugreifen, verwenden Sie Java Script Compiler :

Sie müssen Closure Compiler für die erweiterte Kompilierung verwenden, da es das einzige Tool ist, das alle Variablen umbenennt, auch wenn diese in mehreren Dateien/Modulen verwendet werden. Aber es hat nur ein Problem: Es funktioniert nur, wenn Sie in Codierungsstil schreiben.

11

Dean Edwards Packer ist ein ausgezeichneter Verschleierer, obwohl er in erster Linie den Code verschleiert, nicht irgendwelche Zeichenkettenelemente, die Sie möglicherweise in Ihrem Code haben.

Siehe: Online Javascript Compression Tool und wählen Sie Packer (Dean Edwards) aus der Dropdown-Liste

5
smdrager

Ich würde vorschlagen, zuerst mit etwas wie YUI Compressor zu verkleinern und dann alle Zeichenfolgen und Zahlen mit etwas wie http://www.javascriptobfuscator.com/ in HEX-Werte umzuwandeln

Damit wäre der Code so gut wie unverständlich, und ich denke, dass ein Hacker zum jetzigen Zeitpunkt mehr Zeit benötigt, um Ihren Code nachzustellen, als wenn er ihn von Grund auf neu geschrieben hätte. Umschreiben und Klonen ist das, was Sie eigentlich nicht aufhören können. Wir sind doch freie Menschen!

5

Ich verwende das Closure-Compiler-Dienstprogramm für die Java-Script-Verschleierung. Es minimiert den Code und bietet mehr Optionen für die Verschleierung. Dieses Dienstprogramm ist bei Google unter der folgenden URL verfügbar:
Closure Tools

Aber heute höre ich viel von UglifyJS. Sie können verschiedene Vergleiche zwischen Closure Compiler und UglifyJS finden, in denen Uglify ein Gewinner zu sein scheint.
glifyJS: Ein schneller neuer JavaScript-Kompressor für Node.js, der mit Closure mithalten kann

Bald würde ich UglifyJS die Chance geben.

4
shaILU

Ich benutze Jasob seit Jahren und es ist zweifellos der beste Obfuscator da draußen.
Es hat eine erweiterte Benutzeroberfläche, ist aber dennoch intuitiv und einfach zu bedienen.
Es werden auch HTML- und CSS-Dateien verarbeitet.

Der beste Weg, dies zu verwenden, besteht darin, allen privaten Variablen einen Unterstrich voranzustellen und sie dann mit der Funktion sort zu gruppieren alle zusammen und markieren sie als Ziele für die Verschleierung.

Benutzer können Ihre Quelle weiterhin anzeigen, es ist jedoch viel schwieriger zu entschlüsseln, wenn Ihre privaten Variablen von etwa _sUserPreferredNickName in a konvertiert werden.

Die Engine zählt die Anzahl der Zielvariablen automatisch auf und priorisiert sie, um die maximale Komprimierung zu erzielen.

Ich arbeite nicht für Jasob und habe nichts damit zu tun, sie zu promoten, sondern nur ein paar freundliche Ratschläge zu geben.
Der Nachteil ist, dass es nicht kostenlos und ein wenig teuer ist, aber es sich trotzdem lohnt, wenn man es mit Alternativen vergleicht - die "kostenlosen" Optionen kommen nicht einmal in die Nähe.

4
Matt

Haben Sie versucht Bananascript ? Es erzeugt stark komprimierten und völlig unlesbaren Code.

4
niutech

Probieren Sie dieses Tool aus Javascript Obfuscator

Ich habe es in meinem HTML5-Spiel verwendet, es hat nicht nur die Größe von 950 KB auf 150 KB reduziert, sondern auch den Quellcode unlesbar gemacht. Compiler und Minifier sind umkehrbar. Ich persönlich weiß nicht, wie ich diese Verschleierung umkehren soll.

3
Jerczu

Dieser minimiert aber verschleiert nicht. Wenn Sie die Befehlszeile Java nicht verwenden möchten, können Sie Ihr Javascript in ein Webformular einfügen.

3
Chris S

Sie sollten auf jeden Fall einen Blick auf Obfuscriptor werfen.

Ich gehe über die typischen Tricks zur Minimierung von Javascript hinaus, die wir bei anderen Tools wie YUI Compressor oder Google Closure gesehen haben.

Der verschleierte Code sieht eher verschlüsselt aus. Im Gegensatz zu allem, was ich zuvor gesehen habe.

3
Mike

Ich habe den Eindruck, dass einige Unternehmen (z. B. JackBe) verschlüsselten JavaScript-Code in * .gif-Dateien anstelle von JS-Dateien als zusätzliche Maßnahme zur Verschleierung einfügen.

3
xgMz

Als JavaScript/HTML/CSS-Verschleierer/Kompressor können Sie auch versuchen Patu Digua .

3
Adrian

Ich habe das in der Vergangenheit benutzt und es macht einen guten Job. Es ist nicht kostenlos, aber Sie sollten auf jeden Fall einen Blick darauf werfen.
JavaScript Obfuscator & Encoder

2
Henry

Wenn Sie eine JavaScript-Bibliothek verwenden, sollten Sie Dojo Toolkit in Betracht ziehen, das (nach geringfügigen Änderungen) mit der Kompilierung des erweiterten Modus des Closure Compilers kompatibel ist.

Dojo - Die einzige mit dem Closure Compiler kompatible JavaScript-Bibliothek

Code, der mit dem erweiterten Modus von Closure kompiliert wurde, kann selbst durch einen Verschönerer kaum rückentwickelt werden, da die gesamte Codebasis (einschließlich der Bibliothek) verschleiert ist . Es ist auch durchschnittlich 25% klein.

Nur minimierter JavaScript-Code (YUI Compressor, Uglify usw.) kann nach dem Durchlaufen eines Verschönerungsprogramms leicht rückentwickelt werden.

2
Stephen Chung