Wie verhindern Sie, dass Ihr JavaScript / HTML5-Web-Spiel kopiert oder geändert wird?


45

Ich bin gerade dabei, ein Spiel zu planen, das mit JavaScript und HTML5 erstellt wurde.

Ich habe Probleme zu verstehen, wie Sie verhindern können, dass jemand einfach das JavaScript vom Webserver kopiert und entweder ein eigenes Spiel damit erstellt (nicht meine größte Sorge) oder seine eigenen JavaScript-Funktionen ersetzt und damit die Hoffnung auf verlässliche Kunden aufgibt wild, wenn das Spiel irgendwann Multiplayer unterstützen sollte.

Kann irgendetwas getan werden, um zu verhindern, dass irgendjemand das JavaScript liest?

Wenn nicht, sollte die gesamte Spielverarbeitung irgendwo auf einem Server stattfinden, wobei der Kunde nur für die Erfassung von Benutzereingaben und das Zeichnen von Grafiken verantwortlich ist?


22
Sie sind letzter Absatz lauten etwa Recht, seine wahren für Business - Anwendungen, und seine wahren für Spiele, immer den Client als hostle behandeln.
Nate

4
Wenn ich es LESEN kann, hat mein Browser bereits eine Kopie. Dann kann ich es auch woanders speichern. Alles, was Sie lesen lassen, kann auch kopiert werden.
BerggreenDK

Antworten:


44

Behalten Sie alle Ihre Spieldaten und -logiken auf dem Server. Ein Teil des Spiels, der sich auf der Clientseite befindet, kann ohnehin mit geeigneten Tools kopiert werden (auch wenn es sich um Flash oder Java handelt). Akzeptieren Sie es also einfach und kümmern Sie sich nicht zu sehr darum.

Damit Ihr Javascript aufgrund der schlechten Lesbarkeit weniger kopierbar ist, können Sie es verkleinern . Das ist sowieso eine gute Praxis, da die Spieleseite dadurch schneller heruntergeladen werden kann.


4
Abhängig von den Codierungspraktiken kann auch der gesamte Inhalt auf dem Server gefährdet sein. Um den Code zu minimieren und zu verschleiern, werden nur diejenigen abgeschreckt, die sich nicht die Zeit nehmen und logisch darstellen möchten, was er tut. Fazit ist, wenn Sie sich Sorgen über die geistigen Eigentumsrechte Ihres Codes machen; Stellen Sie es nicht ins Internet.
John

1
Das heißt nicht, dass man nicht minimieren sollte, was die Faulen abschreckt. Sie können auch versuchen, Ihre Spielelogik auf dem Server zu verarbeiten und JSON-Objekte über Ajax zurückzugeben. Die Rückgabe kann jedoch weiterhin mit Firebug angezeigt werden. Verschleiern Sie Ihre Produktionsversion, behalten Sie jedoch eine stark kommentierte Version für sich (dies erschwert die Wartung). Sie können Dinge tun, um Menschen abzuschrecken, aber es ist niemals 100% sicher.
John

3
Tatsächlich. Das Erweitern von verkleinertem Code erfordert nicht einmal viel Aufwand. jsbeautifier.org
James

@ John, bitte beachte, dass es manchmal irrelevant ist, faule Leute abzuhalten, da einige Spiele ruiniert werden, sobald ein einzelner Betrüger auftaucht. Daher ist es nicht relevant, wenn nur einer oder mehrere betrügen.
o0 '.

11

Wie Sie verhindern können, dass jemand einfach das JavaScript vom Webserver kopiert und damit ein eigenes Spiel erstellt (nicht meine größte Sorge)

Hier hilft das Gesetz. In der Praxis scheint dies nicht sehr oft zu passieren.

oder sie ersetzen ihre eigenen JavaScript-Funktionen und lassen verlässlichen Kunden keine Hoffnung, wenn das Spiel irgendwann Multiplayer unterstützen soll.

Aus genau diesem Grund gibt es keine zuverlässigen Kunden in freier Wildbahn. Gib diesen Traum jetzt auf. :)


Das Gesetz wird nicht von großem Nutzen sein, wenn sich die Website, auf der es gehostet wird, in einem Land befindet, das sich nicht sehr um Rechte an geistigem Eigentum kümmert oder aus irgendeinem Grund gegen Ihr Land verstößt. Selbst wenn dies nicht der Fall ist, liegen die Kosten für die Einleitung einer (möglicherweise internationalen) Klage wahrscheinlich weit über den finanziellen Ressourcen eines Menschen, der diese Frage hier stellen würde.
Paul Legato

Die Antwort bezweckte nicht so sehr, rechtliche Schritte zu empfehlen, sondern darauf hinzuweisen, dass der Versuch, solche Software zu sperren, größtenteils sinnlos ist, zumindest weil viele der Leute, die sie kopieren würden, gesetzlich entmutigt sind, sondern auch, weil Kunden kann rückentwickelt werden, unabhängig davon, ob sie Javascript verwenden oder nicht.
Kylotan

8

Genau wie alle anderen empfohlen haben; Behalten Sie so viel Code wie möglich serverseitig bei.

Eine Methode, mit der ich mich mit dem Kopieren von Code befasst habe, ist etwas seltsam, hat aber bisher gut funktioniert.

  • Server-seitig, generieren Sie eine eindeutige ID und speichern Sie diese für später.
  • Serverseitig fügen Sie während des HTML-Renderings eine eindeutige ID im Skriptelement hinzu.
  • Erstellen Sie clientseitig eine WebSocket-Verbindung und übergeben Sie die eindeutige ID an den Server.
  • Serverseitig wird die ID mit der aktuellen Liste verglichen.
  • Wenn keine Übereinstimmung gefunden wird, schließen Sie die Verbindung.
  • Wenn Übereinstimmung wird gefunden, Message - Handler mit „richtigen“ ein und Discard - ID ersetzen.
  • Streame deinen Geheimcode als JSON auf den Client, {"func": "function () {dostuff ();}"}
  • Client-seitig nach Nachrichten Ausschau halten, wenn sie "func" enthalten, es auswerten.

Jetzt wird Ihr Geheimcode clientseitig ausgeführt und wird nicht in der Ansichtsquelle oder in Inspektoren / Konsolen angezeigt. Es gibt immer noch Möglichkeiten, an den Code zu gelangen, aber es ist etwas schwieriger.


Wenn ich etwas aus der obigen Lösung herausholen müsste; Ich würde auch echte WebSocket verbinden und versuchen, einen "falschen Client" zu erstellen, oder ein Firebug-Debugging-Tool in einem Browser verwenden und einfach das Skript anhalten, um die Werte auszuchecken.
BerggreenDK

Sie können keinen gefälschten Client erstellen, wenn Sie nicht irgendwie vorhersagen können, welche eindeutigen IDs derzeit verfügbar sind, da sie zum Zeitpunkt des Ladens der Seite generiert und zum Zeitpunkt der Skriptverbindung geworfen werden. Außerdem ist es schwierig, das Skript anzuhalten und die Werte anzuzeigen, da Sie eine anonyme Funktion auswerten. Wie ich schon sagte, es gibt immer noch Möglichkeiten, an den Code zu gelangen, es ist nur schwieriger. Zum größten Teil genug, so dass Ihr Code "sicher genug" sein sollte. Mehr kann man mit clientseitigem Code nicht machen.
Stephen Belanger

Es wäre ziemlich einfach, einen gefälschten Client zu schreiben, der nur den echten Client vom Server lädt und bei jedem Start den aktuellen geheimen Wert daraus entfernt.
Paul Legato

Ich würde nicht sagen, dass es "einfach" oder "nicht unmöglich" ist. Wie gesagt, es gibt Möglichkeiten, das zu umgehen. Es gibt kein absolut sicheres System. Nur ausreichend verdeckte Schnittstellen, so dass die meisten es zu aufwendig finden, sich zu hacken. In diesem Fall würden Sie Codebausteine ​​streamen, sodass ein Hacker einen Client erstellen müsste, um den Code zu empfangen und in einer nützlichen Struktur anzuordnen. Sie würden Code streamen, wie Sie ihn brauchen, damit der Hacker keinen sofortigen Zugriff auf den vollständigen Code-Dump hat.
Stephen Belanger

3

Der einzige Weg, um einigermaßen sicher zu sein, dass Ihr Spielcode sicher ist, besteht darin, einen Client / Server-Spieltyp zu erstellen und so viel Code wie möglich auf dem Server zu speichern. Und natürlich machen Sie diesen Server sicher!

Das Hauptproblem ist, dass ich auf meinem Computer laufenden Code untersuchen, dekompilieren und herausfinden kann, wie er funktioniert. Dies gilt für JavaScript, Flash, C ++ und alles andere. In der MMO-Entwicklung (wo der Großteil meiner beruflichen Erfahrung liegt) wurde von Anfang an davon ausgegangen, dass der Kunde kompromittiert ist: Was immer Sie für den Kunden geschrieben haben, liegt bereits in den Händen derjenigen, die es wollen, böswillig oder böswillig nicht.

Das Minimieren von Code bietet einen winzigen Schutz vor Leuten, die zu faul sind, um die Minimierung mit einem der vielen Tools aufzulösen. (Der Produktionscode sollte jedoch minimiert werden, um den Daten-Footprint zu verringern.)

Aber wenn Sie sich in einer Situation befinden, in der Ihr Chef beispielsweise eine Art Codeschutz wünscht, können Sie "Javascript obfuscator" (JavaScript-Verschleierer) googeln. Es gibt eine Menge kostenloser und kostenpflichtiger Software, die JS mindestens so undurchlässig macht zu dekompilieren wie Flash ist.


Ich möchte nur darauf hinweisen, dass C ++ nicht auf dem gleichen Niveau wie Javascript ist. C ++ kompiliert eine Assembly, die gelesen werden muss, um die Logik eines Spiels zu verstehen. Jede Anweisung in C ++ kann mehrere Zeilen in der Assembly erstellen, was es zu einer sehr zeitaufwendigen Aufgabe macht. Javascript zu verschleiern ist nicht dasselbe, da es dieselbe Sprache ist. Jeder kann es "verschönern" und anfangen, beinahe von Menschen lesbare Aussagen zu lesen.
TomTsagk

3

Stellen Sie sicher, dass neben all dieser Rede von Code-Verschleierung eine sehr klare Copyright-Erklärung am Anfang jeder Datei steht, und machen Sie deutlich, dass die Lizenz keine Änderung oder kommerzielle Nutzung zulässt. Dies gibt Ihnen Rechtsbehelf, wenn jemand versucht, es zu kopieren. Wenn Sie nicht bereit sind, darüber vor Gericht zu gehen, dann ist diese ganze Frage meist akademisch.


Das ist in Ordnung für das, was es wert ist, aber das ist nicht viel. Das Konzept des geistigen Eigentums wird in der Praxis in vielen Ländern nicht anerkannt, und in jedem Fall gehen die Rechtskosten eines Gerichtsverfahrens wahrscheinlich weit über das hinaus, was ein Poster auf dieser Website zur Verfügung stellt, insbesondere wenn sich der Angreifer in einem anderen Land befindet.
Paul Legato

0

Ich denke, wenn Sie Ihr Spiel zu einem Multi-Player machen, was bedeutet, dass Ihre Spielelogik auf dem Server bleibt, würden Sie es wahrscheinlich zumindest weniger attraktiv machen, zu stehlen. Man kann dem Kunden nicht wirklich vertrauen. Wie bereits erwähnt, gibt es Tools für sogar kompilierte Sprachen wie Java und Flash, mit denen der Code-Text aus dem Byte-Code rekonstruiert werden kann.


-1

Sie benötigen einen Javascript Minifier. Es stehen viele Optionen zur Verfügung, zögern Sie nicht, eine zu finden, die Ihnen gefällt. Um Ihnen hier einige Nachforschungen zu ersparen, können Sie Yahoo Minifier ausprobieren . Ich habe das nicht selbst gemacht, aber ich gehe davon aus, dass es das tut, was Sie brauchen. Das Ziel besteht darin, 1) die Dateigröße zu verringern und 2) den Code zu verschleiern. Dies wird erreicht, indem alle Leerzeichen, Kommentare und Variablennamen durch kürzere, unsinnige ersetzt werden.

Die meisten Webanwendungen verfügen heutzutage über eine erhebliche Menge an Javascript und verwenden Tools wie diese, um ihre IP-Adresse zu schützen. Wie andere gesagt haben, sollten Sie immer fragen: "Kann ich das auf dem Server tun?" für wichtige oder sensible Operationen, aber ich glaube, dies sollte einen gewissen Schutz bieten.


7
Sicherheit durch Unbekanntheit verdeckt das Sicherheitspotenzial. :)
Rushyo

1
Oh bitte. Ich höre dieses Zitat die ganze Zeit, aber es ist absolut nicht wahr. Um ehrlich zu sein, würde das Verschleiern der JS zumindest einige Leute abschrecken.

2
Bergmann hilft ihm nicht. Ich glaube, die meisten "ernsthaften" Leute wissen, wie man diese Skripte wieder "erweitert".
BerggreenDK

1
@ Sergio: Du hörst dieses Zitat die ganze Zeit, weil es wahr ist . Es wird "einige" Leute abschrecken, aber "einige" Leute abzuschrecken ist sinnlos: Wenn man einmal geknackt ist , geht man unter.
o0 '.

-1

Verwenden Sie den Google Closure Compiler http://code.google.com/closure/compiler/ Es ist nicht nur ein Js-Minimierer;)

Was sind die Vorteile von Closure Compiler?

  1. Effizienz. Der Closure Compiler reduziert die Größe Ihrer JavaScript-Dateien und macht sie effizienter, sodass Ihre Anwendung schneller geladen werden kann und weniger Bandbreite benötigt wird.

  2. Code-Überprüfung. Der Closure Compiler bietet Warnungen für illegales JavaScript und Warnungen für potenziell gefährliche Vorgänge, damit Sie JavaScript erstellen können, das weniger fehlerbehaftet und einfacher zu warten ist.1.


-1

Oder Sie könnten etwas wie Game Maker HTML5 verwenden, um Ihr Spiel zu erstellen, das den Code für Sie verschleiert. Das bedeutet, dass der Code für Menschen unlesbar wird. Und es wird fast unmöglich sein, sie zu bearbeiten.


2
-1 Verschleierung geht nur so weit. Es wird das Spiel sicherlich nicht davor schützen, kopiert oder verändert zu werden - wie in den anderen Antworten auf diese Frage zur Verschleierung erwähnt.
Doppelgreener

-1

Alles, was Eigentum ist, sollte serverseitig aufbewahrt werden. Clientseitig stellen Sie nur so viel zur Verfügung, dass die Verwendung des Spiels erleichtert wird.


-1

Wenn Sie alles auf den Server stellen, kann dies zu Leistungsproblemen führen, und Sie können möglicherweise nicht das gesamte Potenzial des Web nutzen, wie wir es heute kennen.

Sie können Ihren Code in c ++ schreiben und in Binärdateien kompilieren.

Native Client (NaCl).

Siehe https://stackoverflow.com/questions/9018537/how-to-run-c-programs-on-the-web-inside-a-browser


Willkommen bei der GDSE. OP fragt speziell nach JavaScript. Während sie möglicherweise in C ++ neu schreiben und NaCl verwenden könnten , erfüllt diese Lösung die angegebenen Anforderungen nicht wirklich. Außerdem sollten die Antworten so in sich geschlossen wie möglich sein - Erwähnung von NaCl und Dumping eines Links sind nicht so gut wie eine Zusammenfassung darüber, was NaCl ist oder warum es möglicherweise hilfreich ist.
Pikalek
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.