2012-09-19 20 views
5

Tak więc piszę grę z JavaScript, a największym problemem jest to, że ktokolwiek gra, kto może mieć przyzwoitą znajomość JS, może otworzyć mój kod źródłowy, wymyślić jak to działa, a następnie podłącz game.score = 100000000000000; do konsoli. Wydaje się jednak, że oprócz zaciemniania skryptu, zawijanie wszystkiego w anonimowej funkcji działa lewą.Zapobieganie wykonywaniu kodu przez użytkownika

(function() { 
    game_start = function() { 
     //etc 
    } 
    //etc 
})(); 

Gdy próbuję i uruchom dowolnego kodu z konsoli Chrome, to wyjdzie z undefined. To jest pożądany rezultat, ale czy istnieje sposób obejścia mojej metody, który uczyniłby go bezużytecznym? Lub jeszcze lepszy sposób, aby zapobiec uruchamianiu się z konsoli?

+4

Kod po stronie klienta może * nigdy * zostać naprawdę nieprzekupny. –

+4

A możesz dodać punkt przerwania w chrome i zmienić, co chcesz. Nie zawracaj sobie głowy włożeniem w to wiele wysiłku. Najlepsze, co wymyślisz, to zamazać/zminimalizować kod, więc trudno go odczytać. spójrz na coś podobnego do uglifyjs –

+0

Zobacz http://stackoverflow.com/a/11960187/453277 –

Odpowiedz

4

Nie ma sposobu, aby zapewnić, że osoba nie będzie oszukiwać. Nawet przy źle zaciemnionym kodzie (mówię o takich rzeczach jak H5b(b){if(b.pd()&&b.Ca&&b.gKa){var a=b.ra(RT.Nwa)) nadal możesz oglądać zmiany interfejsu użytkownika lub żądania sieciowe i śledzić je z tego miejsca.

Niektórzy używają wywołań AJAX do sprawdzania poprawności wyniku, np. za każdym razem, gdy wynik wzrośnie/zmniejszy się, aplikacja wykona połączenie AJAX z back-endem i śledzisz wynik również na zapleczu. Kiedy użytkownik przesyła końcowy wynik, sprawdza go pod kątem wyniku końcowego, a jeśli jest inny, wtedy dowiesz się, że dana osoba oszukiwała.

To jednak nie przeszkodzi ludziom w napisaniu skryptu, który wywoła te wywołania ajax iw ten sposób sprawi, że wynik będzie poprawny.

tl; dr: nie, nie ma sposobu, aby zapewnić, że kod po stronie użytkownika nie zostanie naruszony.

+0

Brzmi jak interesujące rozwiązanie. – Polyov

3

Niestety, nie można skutecznie zabronić użytkownikowi oszustwa, gdy gra działa na jego komputerze. Dowolny kod uruchamiany na komputerze użytkownika może być manipulowany przez użytkownika. Jeśli chcesz uniemożliwić oszustwo, musisz wdrożyć całą logikę gry na serwerze, nie wysyłaj żadnych informacji, których gracz nie powinien znać, i nie akceptuj żadnych poleceń, których gracz nie może zrobić.

+0

Albo przynajmniej logika gry musi zostać zweryfikowana po stronie serwera. – Brad

+0

Rozumiem, że niemożliwe jest zapobieganie oszustwom, zastanawiałem się tylko, jak dużą przeszkodę mogę utworzyć. – Polyov

Powiązane problemy