Jestem w trakcie planowania gry zbudowanej przy użyciu JavaScript i HTML5.
Mam problem ze zrozumieniem, w jaki sposób można uniemożliwić komuś po prostu skopiowanie kodu JavaScript z serwera WWW i albo stworzenie z nim własnej gry (nie moja największa obawa), albo zastąpienie własnych funkcji JavaScript i budzenie nadziei na niezawodnych klientów w dziki, jeśli gra ma w końcu wspierać tryb wieloosobowy.
Czy można coś zrobić, aby nikt nie czytał JavaScript?
Jeśli nie, to czy całe przetwarzanie gry powinno odbywać się gdzieś na serwerze, a jedynym obowiązkiem klienta jest przechwytywanie danych wejściowych użytkownika i rysowanie grafiki?
html5
javascript
client-server
chrześcijanin
źródło
źródło
Odpowiedzi:
Zachowaj wszystkie dane i logikę gry na serwerze. Część gry po stronie klienta i tak można skopiować za pomocą odpowiednich narzędzi (nawet jeśli jest we Flashu lub Javie), więc po prostu ją zaakceptuj i nie przejmuj się tym zbytnio.
Aby twój skrypt javascript był mniej kopiowalny, z powodu złej czytelności, możesz go zminimalizować . To i tak dobra praktyka, ponieważ przyspiesza pobieranie witryny z grami.
źródło
Tutaj pomaga prawo. W praktyce nie zdarza się to często.
Z tego właśnie powodu nie ma wiarygodnych klientów na wolności. Porzuć teraz ten sen. :)
źródło
Tak jak wszyscy inni zalecili; przechowuj jak najwięcej kodu po stronie serwera.
Metoda, z której korzystałem przy kopiowaniu kodu, jest nieco dziwna, ale jak dotąd działała dobrze.
Teraz twój tajny kod działa po stronie klienta i nie będzie wyświetlany w źródle widoku ani w kontrolerach / konsolach. Wciąż istnieją sposoby na uzyskanie kodu, ale jest to nieco trudniejsze.
źródło
Jedynym sposobem na uzyskanie pewności, że kod gry będzie bezpieczny, jest zbudowanie gry typu klient / serwer i umieszczenie na serwerze jak największej liczby kodów. I oczywiście, zabezpiecz ten serwer!
Głównym problemem jest to, że jeśli kod działa na moim komputerze, mogę go sprawdzić, zdekompilować i dowiedzieć się, jak to działa. Dotyczy to JavaScript, Flash, C ++, wszystkiego innego. W rzeczywistości w rozwoju MMO (czyli tam, gdzie jest większość mojego doświadczenia zawodowego) od samego początku założeniem jest, że klient jest narażony na szwank: wszystko, co napisałeś dla klienta, jest już w rękach każdego, kto tego chce, złośliwego lub nie.
Kod minimalizujący zapewnia niewielką ochronę przed ludźmi, którzy są zbyt leniwi, aby rozpakować go za pomocą jednego z wielu dostępnych narzędzi. ( Należy jednak zminimalizować kod produkcyjny, aby zmniejszyć ślad danych).
Ale jeśli znajdujesz się w sytuacji, gdy, powiedzmy, twój szef chce jakiejś ochrony kodu, możesz google „JavaScript obfuscator” - istnieje wiele darmowych i płatnych programów, które sprawiają, że JS jest co najmniej tak samo nieprzepuszczalny do dekompilacji tak jak Flash.
źródło
Oprócz całej tej dyskusji o zaciemnianiu kodu, umieść bardzo wyraźną deklarację praw autorskich na górze każdego pliku i wyraź, że licencja nie zezwala na modyfikację lub komercyjne wykorzystanie. Daje to regres prawny, jeśli ktoś spróbuje go skopiować. Jeśli nie chcesz iść do sądu, to całe pytanie jest w większości akademickie.
źródło
Myślę, że jeśli uczynisz swoją grę wieloosobową, co pociąga za sobą utrzymanie logiki gry na serwerze, prawdopodobnie uczyniłbyś to przynajmniej mniej atrakcyjnym do kradzieży. Naprawdę nie możesz ufać klientowi. Jak ktoś już wspomniał, istnieją narzędzia do nawet skompilowanych języków, takich jak Java i Flash, które mogą odtwarzać tekst kodu z kodu bajtowego.
źródło
Musisz użyć Javascript Minifier. Dostępnych jest wiele opcji, które możesz znaleźć. Aby zaoszczędzić trochę badań, możesz wypróbować Yahoo Minifier . Nie prowadziłem tego sam, ale zakładam, że zrobi to, czego potrzebujesz. Celem jest 1) zmniejszenie rozmiaru pliku i 2) zaciemnienie kodu. Odbywa się to poprzez usunięcie wszystkich białych znaków, komentarzy i zastąpienie nazw zmiennych krótszymi, bezsensownymi.
Większość aplikacji internetowych ma obecnie znaczną liczbę skryptów Javascript i korzysta z takich narzędzi, aby chronić swoje IP. Jak powiedzieli inni, zawsze powinieneś zapytać: „Czy mogę to zrobić na serwerze?” w przypadku ważnych lub wrażliwych operacji, ale uważam, że powinno to zapewnić pewną ochronę.
źródło
Użyj kompilatora zamknięcia Google http://code.google.com/closure/compiler/ To nie jest tylko minimalizator js;)
Jakie są zalety korzystania z kompilatora zamknięcia?
Wydajność. Kompilator zamknięcia zmniejsza rozmiar plików JavaScript i zwiększa ich wydajność, pomagając szybciej ładować aplikację i zmniejszając zapotrzebowanie na przepustowość.
Sprawdzanie kodu Kompilator zamknięcia zapewnia ostrzeżenia o nielegalnym JavaScript i ostrzeżenia o potencjalnie niebezpiecznych operacjach, pomagając w tworzeniu JavaScript, który jest mniej wadliwy i łatwiejszy w utrzymaniu.
źródło
Lub możesz użyć czegoś takiego jak Game Maker HTML5, aby stworzyć grę, która zaciemni kod dla Ciebie. Oznacza to, że sprawi, że kod będzie nieczytelny dla ludzi. I będzie prawie niemożliwe do edycji.
źródło
Wszelkie własności powinny być przechowywane po stronie serwera. Po stronie klienta podajesz tylko tyle, aby ułatwić im korzystanie z gry.
źródło
Umieszczenie wszystkiego na serwerze może mieć problem z wydajnością i nie wykorzystać całego potencjału sieci, jaki znamy dzisiaj.
Możesz napisać kod w c ++ i skompilować go do plików binarnych.
Klient natywny (NaCl).
Zobacz https://stackoverflow.com/questions/9018537/how-to-run-c-programs-on-the-web-inside-a-browser
źródło