Domanda

Sto cercando modi sicuri per trasferire dati tra un client che esegue Flash e un server.I dati in questione verranno generati dall'app Flash, che in questo caso è il tuo punteggio dopo aver terminato una partita.Voglio verificare che i dati non siano manomessi sul server.Quali sono alcuni buoni metodi per ottenere questo risultato?

Un modo semplice è eseguire alcune operazioni sui dati come un hash e restituire l'hash al server insieme ai dati.Tuttavia, questo può essere facilmente risolto da qualcuno con accesso al codice sorgente del client.

Modificare:Mi rendo conto che nulla sarà inattaccabile, ma voglio renderlo il più difficile possibile.La soluzione di @jcnnghm di crittografare i dati con una chiave pubblica e facoltativamente di eseguire controlli di integrità e/o ricalcolo con i registri di gioco è l'opzione migliore, credo.Anche la crittografia SSL è una buona idea poiché rende più difficile decifrare ciò che viene effettivamente inviato al server.

È stato utile?

Soluzione

Crittografare i dati con una chiave pubblica archiviata nel binario.Ciò alzerà la barriera d’ingresso per un attacco.In aggiunta a ciò, controlla l'integrità dei dati non appena arrivano sul server.Potrebbe essere semplice come calcolare il numero massimo di punti che potrebbero realisticamente essere guadagnati per unità di tempo di gioco o trasmettere i registri di gioco al server per assicurarsi che il punteggio sia corretto.

Niente sarà totalmente a prova di hacker, qualunque cosa tu faccia, ma questo fermerà tutti tranne i più determinati.

Aggiornamento: @segno:Flash supporta SSL in modo nativo.

Altri suggerimenti

Il codice in esecuzione su una piattaforma non affidabile può mantenere la propria integrità?No, decenni di schemi di protezione dalla copia non funzionanti mi portano a postulare che ciò sia impossibile.L'operazione inversa di codice dannoso eseguito in una sandbox attendibile è fattibile, ma la cosa migliore che puoi fare con il tuo problema è rendere scomodo per le persone imbrogliare.

Dai un'occhiata al pacchetto AS3Crypto su http://code.google.com/p/as3crypto/.Non l'ho provato, ma questo pacchetto afferma di supportare (parzialmente) il protocollo TLS 1.0.

TLS fornirà un tunnel sicuro tra la tua applicazione Flash e il server.http://en.wikipedia.org/wiki/Secure_Sockets_Layer

@jcnnghm normalmente non vuoi utilizzare la crittografia delle chiavi pubbliche (RSA, DSA) per la crittografia dei dati sfusi a causa del suo "grande tempo computazionale.La crittografia a chiave pubblica dovrebbe essere utilizzata nelle fasi di handshaking e di accordo della chiave in un protocollo di sicurezza, ma la crittografia dei dati in blocco dovrebbe essere gestita da una cifratura simmetrica come AES e TDES.I protocolli TLS e SSL funzionano in questo modo.

Finché le persone possono accedere all'eseguibile - il che, a meno che tu non voglia eseguire il gioco su un chiosco chiuso a chiave, è sempre il caso - non esiste un modo perfettamente sicuro per farlo.

Le industrie della musica e del cinema hanno speso decine di milioni in DRM che sono stati violati dagli hobbisti domestici in giorni/settimane.Se non possono proteggere loro cose...

Sono d'accordo sul fatto che le risposte fornite sul fatto che nulla sia a prova di hacker.Perché una volta che puoi leggerlo, puoi manipolarlo/copiarlo e quindi decompilarlo.

Un altro approccio che ho pianificato è generare chiavi univoche pr.sessione del giocatore (inclusa una sorta di ora/data come valori salt).

Quindi attraverso l'applicazione, magari inviando/trasmettendo periodicamente il punteggio di stato e ottenendo una nuova chiave valida.Se questa sincronizzazione fallisce, interrompi l'intera sessione.

Lo svantaggio potrebbe essere che troppi giocatori simultanei diminuiscano la velocità di risposta del server e quindi effettuino "falsi timeout" + lasciando il server di gioco aperto per attacchi DoS.

Ma qualcosa con il rinnovo della "chiave di sessione" mentre l'utente ha la sessione, richiederà un po' di gestione extra della sessione, ma se farà lavorare un po' di più gli imbroglioni, lo proverò sicuramente :o)

D'altra parte, NIENTE è a prova di hacker, quindi non fidarti al 100%, non importa quanto intelligente sia la soluzione che pensi.

Un'ultima nota sarebbe anche quella di dividere la tua applicazione in moduli/livelli ecc.in modo da non avere accesso a ogni parte del codice semplicemente avviandolo.

Attualmente il mio piano è quello di costruire un grande mondo multilivello e il cliente/giocatore riceverà SOLO i file allegati alla parte in cui risiede il giocatore.

Spero che questo sia di qualche utilità per i tuoi pensieri.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top