2010-03-30 10 views
8

Sto lavorando ai giochi usando javascript alcuni html e css, e mi chiedevo se ci fosse un modo per proteggere il gioco in modo che l'utente non potesse semplicemente chiamare game.php? Result = victory per finire il gioco e guadagnare qualche punto.Come fare un gioco sicuro in javascript?

A partire da ora ecco la soluzione che ho.

  • Per un gioco di possibilità, avviare la pagina di con il risultato già in atto, vincono o sciolti, poi basta fare un po ' animazioni di mostrarlo, ma tutto il punteggio e vincere prodotti/loose è fatto lato server.

  • Per un gioco di battaglia, basta avere l'azione dalla chiamata javascript, e fare il calcolo dei danni, la reazione della oponent sul server e solo inviare nuovamente i dati.

ma l'ultima soluzione implica che dovrò inviare azioni ogni volta che l'utente fa qualcosa. Questo potrebbe funzionare per un gioco di turno per turno, ma penso che sarebbe di rallentare per qualsiasi altro tipo di gioco. Quindi la mia domanda è, c'è una sorta di modo sicuro che posso preparare il mio javascript per proteggere le informazioni inviate.

risposta

13

L'unico modo per renderlo sicuro è che tutto il calcolo e la convalida si verificano sul lato server. È così che si fa praticamente su tutti i giochi online. Il client non può mai essere considerato affidabile nelle comunicazioni online e devi sempre accertarti che sul lato server l'utente stia effettivamente facendo qualcosa di valido. (In teoria, comunque, in pratica bisogna fidarsi del cliente piuttosto per compensare il ritardo e scaricare alcune cose non critiche dal lato client).

Per questo motivo, javascript non è un ottimo linguaggio per lo sviluppo di un gioco online, poiché ogni azione deve essere elaborata e convalidata dal server. Per altri linguaggi di programmazione non è un problema così grande, perché puoi costruire i tuoi protocolli di comunicazione usando TCP/IP per il server e il client. Tuttavia, per javascript non esiste tale possibilità, perché è necessario fare affidamento sul protocollo HTTP e sui gestori XMLHTTPRequest, che rendono molto inefficiente la comunicazione live client-server.

Come hai detto, puoi sempre fare l'interfaccia in javascript, ma per sicurezza, devi comunque eseguire molte cose sul lato server e questo certamente non funziona per i giochi che richiedono un controllo più orientato all'azione.Quindi, sei praticamente limitato ai giochi basati su turni, se hai bisogno della sicurezza.

+0

grazie per la risposta completa :) Immagino che continuerò a girare per turno e giochi casuali. – rnaud

1

No, non c'è modo.
Cosa c'è di sbagliato nell'inviare azioni dell'utente al server?

+1

Bene i' Pensando alle connessioni mobili e basse, vorrei evitare di caricare cose ogni mezzo secondo. – rnaud

2

Si potrebbe fare qualcosa per ostacolare l'utente ingenuo, ma probabilmente non tutti. Tutto dipende da quanto la persona è motivata ad "attaccare" il tuo gioco. Alla fine della giornata, l'utente può utilizzare un debugger javascript per vedere esattamente cosa sta facendo il codice e replicarlo. Anche se rispedisci ogni azione di gioco, l'utente potrebbe comunque replicarlo. Se non si presta attenzione alle azioni che l'utente può eseguire, è possibile che siano in grado di inviare azioni che sarebbero impossibili se controllassero il gioco con lo schema di controllo predefinito.

2

Non ci dovrebbero essere URL per la vittoria. Durante il gioco, il client deve inviare le azioni dell'utente e, se hanno vinto, il server li reindirizza alla pagina della vittoria.

Nessun calcolo/premio deve essere eseguito sulla pagina di vittoria, se presente.

1

Questa opzione è considerata un'opzione? (Risposta tardiva)

Trasferire il critico (cose che non si vuole essere hackerati), su un flash player interno nascosto, che agisce sia come memoria di variabili critiche, calcolatrice (ad esempio: punti vita) e "comunicatore" al sever per tali dati di gioco.

È sicuramente più sicuro di JavaScript. Ma ancora; È sempre meglio presumere che il tuo lato cliente sia al 100% non sicuro. (Anche in C++ giochi, lol: gli hacker)

Tuttavia, trasferendo il traffico per i dati di gioco in Flash, si è in grado di utilizzare alcune delle sue funzioni di comunicazione più interessanti, come ad esempio: P2P =)

+0

Questa è un'opzione molto interessante a cui non ho mai pensato. Non ho davvero molta conoscenza di AS, ma come funzionerebbe? –

+1

@Angelo R. Il collegamento contiene ulteriori dettagli sul collegamento di AS3 con JS: http://www.hardcode.nl/archives_155/article_334-call-javascript-function-from-as3-and-viceversa. Per dirla in breve, entrambe le parti sono in grado di eseguire chiamate di funzione l'una con l'altra. Forzando, il traffico di dati importanti da eseguire attraverso flash, e quindi il server. Puoi trasformare il flash in una memoria variabile "sicura" che si sincronizza con il server, con javascript come "visualizzazione dati". Tuttavia: nota che il flash non è sicuro al 100%, ma è sicuramente molto più difficile da decompilare rispetto a Javascript. – PicoCreator

+0

Grazie per questo, sarà una lettura interessante .. e possibilmente progetto –

Problemi correlati