Domanda

sto lavorando sul backend per un gioco Flash e ho bisogno di sicura i dati che entrano nel quadro di valutazione.

Il gioco sta per essere ospitato su molti siti in un banner pubblicitario, l'utente dovrà giocare in l'annuncio quindi fare clic attraverso il sito principale per salvare i propri dati.

Al momento sto pensando lungo le linee di questo

  1. User gioca la partita e fa clic per inviare il proprio punteggio
  2. Sullo sfondo, la bandiera invia il punteggio e il dominio di origine a uno script sul sito principale.
  3. Lo script controlla il dominio è uno dei domini validi l'annuncio è ospitato su.
  4. Se tutto è giusto, lo script crea un hash di questo punteggio e il dominio e lo memorizza nel database a fianco del punteggio.
  5. Lo script restituisce l'hash per Flash che cobbles è sul querystring di un getURL, che sbloccato il risultato principale
  6. La pagina tabellone controlla il referer per assicurarsi che sia uno dei domini validi.
  7. Se si tratta poi controlla il database per l'hash per se è una pedina valida
  8. l'utente compila poi nei loro dettagli e il record viene aggiornato in base alla hash

L'ultima volta che ho controllato flash non inviare informazioni referer, che getta un pò una chiave nel mio piano. Quindi, c'è uno schema già stabilito per questo tipo di interazione Flash / Database?

Che tipo di hashing / Checksuming dovrei usare al punto 4? Qual è il nome corretto per questo tipo di operazione, si tratta di un hash, checksum o qualcos'altro?

ho capito che essere una tecnologia lato client, Flash non sarà mai effettivamente che fissano, ma nella mia mente, qualcosa di simile a quanto sopra è quanto di più dificile come hai intenzione di farlo a incidere questo tipo di applicazione.

UPDATE: Il mio obiettivo principale è quello di rendere più difficile per le persone a trovare l'URL dello script che aggiunge il punteggio al database e semplicemente lo spam con punteggi falsi

.

Grazie, Greg

È stato utile?

Soluzione

Ho già lavorato nel settore dei videogiochi, e ha fatto qualcosa in questo senso. Per quanto ne so, nessuno ha mai preso la briga di cracking il punteggio presentando parte.

Il modo in cui è stato fatto è stato:

  1. generare un numero casuale come un sale (da flash)
  2. Codificare il punteggio utilizzando operazioni matematiche, sulla base del sale (da flash)
  3. Aggiungi un checksum per assicurarsi che non vi era alcuna rinvenimento sul punteggio (da flash)
  4. Invia il punteggio e tutti i dati necessari per la pagina di punteggio invio della
  5. Sul server, convalidare che il punteggio non è stato temperato utilizzando il checksum
  6. Se il punteggio è valido, quindi inserirla nel database, altrimenti, respingerla
  7. Se si desidera, è possibile registrare indirizzi IP dei presentatori di punteggi che violino i checksum (forse una politica di tre checksum, sei fuori) e aggiungere uno script per vietare loro di accedere al server per 1 ora, ma questo probabilmente non sarà necessario a meno che qualcuno vuole rompere il codice così male.

Nota:  L'hashing / checksuming è stato realizzato utilizzando una funzione personalizzata. Non ha bisogno di qualcosa molto sicuro. E 'stato fatto usando un calcolo sul sale e il punteggio. Alcune semplici operazioni matematiche come somme, moltiplicazioni e sottrazioni.


Modifica : un semplice algoritmo / la matematica per la somma di controllo

consente di dire l'utente ha un punteggio di 5885 .
Si genera un numero casuale come un sale di 134.789 (lunghezza costante, pad con 0)

cryptedScore = Risultato * Salt (si dovrebbe usare qualcosa di un po 'più complesso qui, ma è solo un exemple)

Nel nostro esempio, il punteggio criptata potrebbe essere: 793.233.265

Ora, per la somma di controllo, diciamo che si vuole avere un valore di 253 come un checksum.
È possibile aggiungere tutti i numeri del vostro punteggio criptato + 9 + 7 3 + 2 + 3 + 3 + 2 + 6 + 5 = 40

Ora, si calcola il valore della vostra checksum per questo punteggio
253 - (somma dei numeri di punteggio criptati% 253 )

Ora, abbiamo i seguenti numeri:
il sale = 134.789
il punteggio criptata = 793233265
il checksum = 40

Si effettua una richiesta al server, l'invio di 134.789.793.233,26504 milioni come un punteggio.

Il server di punteggio, è possibile dividere 793.233.265 di 134.789 dando 5885 e convalidare il checksum utilizzando la stessa funzione di prima.

Se il checksum non riesce, allora i numeri sono stati manomessi.

probabilmente si potrebbe finire con qualcosa di molto più sicura, ma dovrebbe fare il trucco.

Altri suggerimenti

In sostanza non si desidera verificare il punteggio è in arrivo da un client legittimo, si desidera verificare il cliente effettivamente svolto il gioco per raggiungere il punteggio. In sostanza il meglio che si può sperare è gente che è necessario per creare un'intelligenza artificiale per giocare il gioco.

Qui ci sono un paio di cose che si possono provare:

  • Accedi gli ingressi in partita e inviare quelli lungo con il punteggio. Il server può quindi confermare che il punteggio corrisponde ad un possibile gioco. È inoltre possibile rilevare osservazioni duplicati in questo modo.
  • Applica rate limiting per fermare i clienti dal presentare punteggi ad un ritmo ovviamente disumana. Applicare limiti superiori sui punteggi ammissibili sulla base di ciò che è effettivamente possibile raggiungere e limiti più bassi su cose come le azioni al secondo.
  • ingressi precedenti seminare parzialmente il generatore di numeri pseudo casuali (a patto di utilizzare uno). Ciò rende meno probabile che i clienti possono modificare una presentazione un po 'e ancora ottenere un valido gioco / punteggio combo.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top