Come posso proteggere l'invio dei punteggi dei giochi HTML5 sul mio server


13

Sul backend sto usando Java. Ho un gioco in HTML5; quando l'utente lo completa mando una chiamata Ajax per salvare il punteggio nel database. Ora, qualcuno può facilmente utilizzare strumenti come Fiddler e firebug per modificare questa richiesta Ajax e inviare un punteggio molto migliore al server. Come posso assicurarmi che l'utente non possa manipolare i punteggi!

Risposte:


18

Non inviare semplicemente un punteggio intero al server. Invia una raccolta di statistiche di gioco che puoi utilizzare per verificare che il punteggio sia realistico. Oppure puoi implementare una chiave già condivisa per il calcolo del punteggio. Puoi inviare punteggi e statistiche incrementali durante il gioco e assicurarti che l'aumento sia ragionevole.

Tuttavia, non mi preoccuperei troppo. I suggerimenti di cui sopra renderanno più difficile, ma non impossibile, inviare un punteggio falso. Tuttavia, se lo rendi leggermente difficile, la stragrande maggioranza delle persone che giocano al tuo gioco non sarà interessata a provare a imbrogliare.

Fai attenzione a come stai permettendo al tuo gioco di comunicare con il tuo server. Non vuoi che il tuo gioco sia un punto di accesso al tuo server per l'hacking. Assicurati di convalidare sempre i tuoi input e di non fidarti mai del cliente.



@ Byte56 nessuna forma di offuscamento o crittografia proteggerà il tuo codice da un debugger utilizzato per modificare i dati di gioco durante il gioco. Se il gameplay avviene sul client, è essenzialmente impossibile prevenire questa forma di imbroglio. Un browser abilitato per Javascript non è un dispositivo di elaborazione affidabile.
Mark R

10

Come ha detto Byte56: "non fidarti mai del cliente", ma:

Non fidarsi mai del cliente ha un prezzo:
avere tutti i giochi che si giocano sul server aumenterà molto il costo dell'infrastruttura.

Supponendo che la maggior parte dei giocatori non imbroglia
e il punteggio più alto si stabilizzerà dopo un po 'di tempo e smetterà di cambiare molto

c'è una via di mezzo.

Registra i giochi (sul client).
(A seconda del tipo di gioco che potrebbe essere super facile (ad esempio scacchi) o un po 'complicato (ad esempio un FPS multiplayer),
ma è sempre fattibile.)

Quando un giocatore termina una partita, invia il punteggio.
Se il punteggio rientra in un determinato intervallo nella parte superiore (ad es. 1% superiore o 5 superiore),
richiedere i dati registrati dal giocatore
e riprodurre quel gioco sul server.
Se i punteggi corrispondono, accetta il punteggio.

In questo modo non hai bisogno di ulteriori risorse lato server per la maggior parte delle giocate,
ma puoi garantire che i punteggi migliori siano validi.


2
In altre parole, a chi importa se imbrogliano per qualcosa di diverso dai punteggi migliori (perché dovrebbero farlo comunque?), Quindi quelli sono gli unici che devi convalidare.
jhocking

4

Non ti preoccupare di quello; la protezione da tutti gli attacchi è essenzialmente impossibile se ti fidi del cliente. Se nessuno usa Fiddler ecc., Per modificare la richiesta AJAX, può semplicemente avviare un debugger JS e modificare i dati di gioco per darsi 1000 vite, ecc. O modificare il codice o fare altre 100 cose a cui non hai pensato.

Ho scritto un gioco del genere diversi anni fa e, per quanto ne so, nessuno ha tradito in questo modo. Non è stato assegnato alcun premio, tranne il fatto di avere il tuo nome nella tabella dei punteggi.


4

Riduci la motivazione sociale a imbrogliare, ad esempio utilizzando le classifiche sociali (imbrogliare ti fa solo apparire bene a una manciata di amici, non rovinarla per tutti).

Verifica sul server Joel Poloney ha avuto un buon riassunto delle tecniche in Game Developer 2012 settembre "Scala il tuo gioco online"


2

Quando vuoi creare un gioco online a prova di imbrogli, devi gestire tutta la logica di gioco sul server. Tutto ciò che accade sul lato client può essere controllato e manipolato dall'utente. Ci sono tecniche come la crittografia o l'offuscamento che puoi provare, ma alla fine è solo sicurezza attraverso l'oscurità che può essere aggirata da qualcuno che è sufficientemente determinato.

Certo, un gioco che gira sul server è molto più complicato da sviluppare, richiede molte più risorse lato server e la latenza della rete è dannosa per l'esperienza di gioco (specialmente per i giochi frenetici), ma è l'unico modo efficace impedire ai giocatori di barare.


Anche questo non impedisce tutti gli imbrogli - solo l'ovvia roba "sì, ho legittimamente ottenuto un bazillion points". Dal momento che qualcosa deve essere eseguito sul client, finiscono con un certo controllo a prescindere. Per lo meno, qualsiasi client, in particolare un browser Web, è programmabile tramite script.
cHao,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.