Javascript-Bibliothek: zu verschleiern oder nicht zu verschleiern - das ist hier die Frage
Schreiben brauche ich eine GUI zugehörigen javascript-Bibliothek. Es wird meine website ein bisschen von einer Kante (in Bezug auf die Funktionalität, die ich anbieten kann) - bis meine Konkurrenten spielen mit, lange genug, um herauszufinden, wie Sie schreiben es von sich selbst (oder schließlich hacken Sie die heruntergeladene Skript). Kann ich die Tatsache akzeptieren, dass es emuliert wird im Laufe der Zeit - das ist par für den Kurs (Teil der Wirtschaft). Ich will nur ein paar Monate Atempause, wo die Leute gehen "Wow - wie die f*** haben Sie das gemacht?" - das gibt mir ein paar Monate Kostenlose Werbung und Dynamik zu verschieben, auf andere Dinge.
Klar zu sein, ich bin nicht selbst betroffen, über hard-core Hacker, die immer noch hack die Quelle - das ist eine verlorene Schlacht ist nicht zu kämpfen lohnt (und in jedem Fall Stimme ich zu, dass mein code nicht "so precious"). Was ich aber nicht ertragen kann, ist die Idee, effektiv, einfach die übergabe all die harte Arbeit, die Sie hätte in die Bibliothek, um meine Konkurrenten, durch die Verwendung von plain javascript, dass jeder Sie herunterladen und verwenden können. Wenn jemand geht, zu verwenden, was ich gearbeitet habe, dann habe ich sicher wie die Hölle will nicht einfach die hand über Sie - ich will, dass Sie hart arbeiten, bei der Decodierung. Wenn Sie Sie entschlüsseln kann, die Sie verdienen, um den code (, Sie werden wahrscheinlich finden Sie heraus, konnten Sie geschrieben haben besseren code, die sich selbst - Sie hatte einfach nicht den Geschäftssinn, um all die [plain-vanilla -] Komponenten, die insbesondere um) - Also, ich bin nicht behaupten, niemand hätte schreiben können (das wäre eine absurde Forderung in jedem Fall) - sondern eher, was ich sage, ist, dass niemand (bis jetzt) hat die Funktionalität, die ich spreche, zur Verfügung dieser Branche - und das ich (das denken als eine Unternehmer eher als eine geek/coder), wollen Milch es für alle Ihren Wert, solange es dauert ich.e, bis es (zwangsläufig) gehackt wird.
Es ist eine feststehende Tatsache, dass nicht eine Webseite in der Industrie bin ich "angreifen" hat diese Funktion, also den Wert einer solchen Bibliothek ist unbestritten und steht nicht zur Diskussion (also das ist nicht das, was ich Frage hier).
Was ich Suche, um herauszufinden, die vor-und Nachteile des verschleierns eine javascript-Bibliothek, so dass ich kann kommen, um eine endgültige Entscheidung zu treffen.
Zwei meiner größten sorgen sind, das Debuggen und die subtilen Fehler, die eingebracht werden können, durch den obfuscator.
Ich würde gerne wissen:
-
Wie kann ich diese Risiken managen (zu können Debuggen von fehlerhaftem code, Gewährleistung/Minimierung gegen Verschleierung von Fehlern)
-
Gibt es irgendwelche gute Qualität, Industrie-standard-obfuscators, die du empfehlen kannst (vorzugsweise etwas, das Sie selbst verwenden).
-
Was sind Ihre Erfahrungen mit obfuscated code in einer Produktionsumgebung?
- Dieser Beitrag verdient einen golf klatschen. <golfclap/>
- Siehe stackoverflow.com/questions/29399/...
- Sie sind Nutzung der
<goldclap/>
tag lohnt sich ein<golfclap/>
. - Sie sollten Lesen, die Paul Graham essays, erhalten Sie einen guten Eindruck von der mechanik des Start-UPS.
- Sie sind verwirrend, reverse engineering, hacking und scheinen nicht zu verstehen, den Wert von Geschäftsgeheimnissen als einer form des geistigen Eigentums.
- Wie wertvoll ist dies? Denken Sie an eine Zahl. Denken wir nun an, dass die Hälfte der Anzahl. Glaubst du, es wäre möglich, eine Javascript-Programmierer, der für diesen Betrag (die Hälfte des Wertes Ihres Codes) der un-munge es? Wenn dem so ist, warum würden Sie nicht erwarten, dass genau das passieren kann?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Also wirklich, Sie versuchen zu lösen ein business-Problem mit technischen Maßnahmen.
Jeder Wert sein Salz als Javascript-Programmierer sollte in der Lage sein, neu zu erstellen, was auch immer Sie tun, ziemlich leicht, indem Sie nur Blick auf das Produkt selbst, kein code benötigt. Es ist nicht wie Sie sind, erfinden einige neue Magische Ding noch nie gesehen, Sie sind nur putting die Stücke zusammen in einer neuen Art und Weise, wie Sie selbst zugeben. Es ist nur Javascript.
Selbst wenn Sie verschleiern das Skript, werde es noch als-ist, Wettbewerber könnten nur nehmen Sie es und führen Sie mit ihm. Ein paar Anpassungen sollten nicht allzu schwer sein, auch mit obfuscated code.
In Ihrer Nische Geschäft, werden Sie wahrscheinlich Recht schnell merken, wenn jemand "geklaut" Ihr Skript. Wenn das passiert, ist es eine rechtliche Frage. Wenn Ihre Wettbewerber sein wollen im klaren, rechtlich, werden Sie haben, neu zu schreiben das Skript von Grund auf eh, die automatisch zu kaufen Sie einige Zeit.
Wenn Ihre Konkurrenten sind technisch nicht in der Lage zu kopieren, Ihr Produkt ohne gar Diebstahl der code, es wird nicht einen Unterschied machen, ob der code in klar oder verschleiert.
Während Sie können gehen Sie die lange, gefährliche Straße von obfuscators, die Sie in der Regel sehen Sie nicht verwendet werden, die auf real -, Produktions-Anwendungen aus dem einfachen Grund, dass Sie nicht wirklich viel tun. Sie werden bemerken, dass Google apps, die wirklich einen ganzen Haufen von proprietären und sehr wertvoll JavaScript, wenn Sie nach unten zu bekommen, es ist wirklich nur minimiert und nicht verschleiert, wenn die Art, wie minimizers Arbeit, die Sie jetzt sind, sind Sie so gut wie verschleiert. Sie wirklich brauchen, zu wissen, was Sie tun, zu extrahieren, die die Bedeutung von Ihnen, aber bestimmt diejenigen erfolgreich sein wird.
Das andere problem ist, dass obfuscated code muss funktionieren und wenn es funktioniert, die Leute können Sie einfach rip it Großhandel, verstehe nicht viel davon, und verwenden Sie es, wie Sie sehen, passen in dieser form. Sicher, man kann Sie nicht ändern es direkt, aber es ist nicht schwer zu Schicht auf einige patches, re-implementieren Teile, die Sie nicht mögen, ohne sich zu tief. Das ist einfach die Natur von JavaScript.
Den Grund, Google und dergleichen nicht leiden, einen Ausschlag von cut-and-paste-Konkurrenz ist, weil das JavaScript ist nur ein Teil des Pakets. Damit ein Maß an Kontrolle darüber, wie und wo diese Dinge verwendet werden, eine große Komponente, die benötigt werden, um server-basierte. Die gute Nachricht ist, können Sie nutzen Dinge wie Node.js zu machen es relativ leicht zu split-client-und server-code-ohne neu-Implementierung von teilen in eine ganz andere Sprache.
Was Sie möglicherweise wollen untersuchen, ist nicht so viel verschleiern, aber das aufteilen der Anwendung in Teile, die geladen werden können auf-Nachfrage von einer Art von service, und diese Teile können stark voneinander abhängig und vor allem nicht-funktionale, ohne diese core-server, können Sie einen größeren Grad an Kontrolle darüber, Wann und wo diese Bibliothek verwendet wird.
Sehen Sie Elemente wie Google bewegt sich auf einer meta-Bibliothek, die einfach dient als loader für andere Bibliotheken. Dies ist ein Schritt zur Vereinheitlichung der laden Anrufe für Google Apps, Google AdSense, Google Maps, Google Adwords, und so weiter.
Wenn Sie wollten, um ein wenig klug ist, Sie so sein kann, wie Google Maps und fügen Sie ein poison pill Ihre JavaScript-Bibliotheken, wie Sie serviert werden dynamisch, so dass Sie arbeiten nur in einem bestimmten sub-Domain. Dies erfordert die Erzeugung auf einer as-needed basis, und während es kann jederzeit entfernt werden mit Fachwissen, es verhindert Großhandel copy-paste-Verwendung von JavaScript-Dateien. Zum einfügen einer klugen nennen das Dokument überprüft.href ist nicht schwer, zu finden, die alle diese Instanzen in einer aggressiv minimiert Datei wäre besonders ärgerlich und wahrscheinlich nicht der Mühe Wert.
Javascript-Verschleierung Fakten:
Javascript obfuscation-fiction: ( ich werde diesen Abschnitt überspringen 😉 )
Antwort auf Q2 - Sugested obfuscation-tools:
Antwort auf Q3 - Erfahrungen mit obfuscated code
Standard-Antwort auf Verschleierung Fragen: Mit einem obfuscator genug, um sichere meine JavaScript-code?
IMO, es ist eine Verschwendung von Zeit. Wenn die Wettbewerber verstehen Sie Ihren code in das klare (vorausgesetzt, es ist etwas über ein paar tausend Zeilen...), Sie sollten keine Schwierigkeiten haben deobfuscating es.
Verschleierung verursacht mehr Fehler, können Sie durch die Ausgaben der Zeit zu Debuggen. Es ist bis zu der person, die schrieb die Verschleierung (sei es Sie oder jemand anderes), letztlich wird es einfach zu vergeuden, eine Menge Zeit.
Google ' s Closure Complier verbirgt Ihren code, nachdem Sie beenden, es zu schreiben. Das heißt, Ihren code schreiben, führen Sie es durch den compiler und veröffentlichen die optimierte (und verschleiert) js.
Du tun müssen vorsichtig sein, wenn Ihr mit externen js, die Schnittstellen mit der lib, aber da es ändert sich die Namen der Objekte, so dass man nicht sagen kann, was was ist.
Automatische full-code-Verschleierung ist bisher nur in der Closure Compiler ist der Erweiterte Modus.
Code kompiliert mit Verschluss Advanced-Modus ist es fast unmöglich, reverse-engineer, sogar die durch einen beautifier, als die gesamte code-Basis (includinhg der Bibliothek) ist verschleiert. Es ist auch 25% kleiner im Durchschnitt.
JavaScript-code, der lediglich minified (YUI Compressor, Verunstalten etc.) ist einfach zu reverse-engineer, nachdem er durch einen beautifier.
Wenn Sie verwenden eine JavaScript-Bibliothek, betrachten Dojo Toolkit kompatibel ist (nach geringfügigen änderungen) mit dem Closure Compiler Advanced-Modus Zusammenstellung.
http://dojo-toolkit.33424.n3.nabble.com/file/n2636749/Using_the_Dojo_Toolkit_with_the_Closure_Compiler.pdf?by-user=t
Ihnen verabschieden könnte ein open-source-business-Modell und die Lizenz, Ihre Skripte mit der GPL oder Creative Commons BY-NC-ND oder ähnliche
Während der Verschleierung im Allgemeinen ist eine schlechte Sache, IMHO, mit Javascript, die Geschichte ist ein wenig anders. Die Idee ist nicht zur Verschleierung von Javascript selbst, sondern kürzere code-Länge (Bandbreite ist teuer, und das erstmalige Benutzer kann nur angepisst, warten auf Ihre Javascript laden das erste mal). Zunächst als Verkleinerung (mit Programmen wie verkleinern), hat es sich ziemlich weiterentwickelt und nun eine voll-compiler verfügbar ist, wie YUI compiler und Google Closure Compiler. Solche compiler führt statisch prüfen (das ist eine gute Sache, aber nur wenn Sie die Regeln befolgen, die der compiler), Verkleinerung (ersetzen, die langen Variablen-Namen, die mit 'ab' zum Beispiel), und viele andere Techniken der Optimierung. Am Ende, was man hat das beste aus beiden Welten, Codierung im nicht-kompilierten code, und die Bereitstellung kompiliert (, minified, und verwürfelt) - code. Leider würden Sie natürlich brauchen, um es zu testen Ausführlicher als gut.
Die Wahrheit ist obfuscator oder nicht, jeder Programmierer Wert sein Salz reproduzieren konnte, was auch immer es ist du hast in etwa genauso viel Zeit, wie er Sie nahm. Wenn Sie Stahlen, was Sie Tat, man könnte Sie verklagen. Also Fazit aus der business-Sicht ist, dass Sie, von dem moment an, die Sie veröffentlichen, etwa die gleiche Menge an Zeit, die Sie an der Umsetzung Ihrer design-bis ein Konkurrent holt. Zeitraum. Das ist ein Vorsprung, den Sie erhalten. Den rest ist Sie Innovationen schneller als Ihre Konkurrenz und marketing es mindestens genauso gut wie Sie tun.
Schreiben Sie Ihre Website in flash, oder noch besser in Silverlight. Dies wird geben Sie Ihrem Unternehmen eine unübertroffene GUI, dass Ihre Konkurrenten werden salivating über. Aber kompiliert Natur von flash/dotnet wird nicht zulassen, dass Sie einfach in Ihrem code. Es ist eine win/win situation für dich 😉
Not all users can or will install the plugins required to use the technologies you suggest.
Am häufigsten verwendeten plugins kommen mit dem browser, so dass ein nonissue. In dem Szenario, das Sie die OP wäre auch zu vermeiden Sie die Verwendung von HTML5, SVG, und andere neue Technologie. Das ist eine Tangente, da viele plugins unterstützen eine Vielfalt von Betriebssystemen. Der einzige Punkt, an dem Ihr argument wird dann relevant ist, mit Bedenken für proprietäre Systeme, sind grundsätzlich und absichtlich geschlossen, wie das IPhone, und das ist ein Preis, den die Nutzer solcher geschlossenen Systeme müssen bereit sein zu akzeptieren.eval
. Nicht zu erwähnen, mit bytecode, kann man nicht an Magie wie Sie im wirklichen Versammlung Sprachen, die bytecode-zwingt Sie, um es etwas einfacher zu Lesen ist. Und bitte nicht empfehlen, die Benutzer herunterladen eine binäre... "Dies wird geben Sie Ihrem Unternehmen eine unübertroffene GUI" Ist das wahr? Ich kann mich nicht erinnern, jemals zu sehen, eine gute Flash-design.