cp94 ha scritto:Se ho capito bene, più semplicemente:
1. il server genera una string_id a inizio sessione di gioco
2. la string viene inviata all'app
3. quando l'app deve mandare i dati al server mando string_id+dati
4. controllo sul server se string_id ricevuta == string_id, in tal caso salvo i dati
Corretto?
No, la stringa dovrebbe essere sempre la stessa e andrebbe salvata nel codice.
cp94 ha scritto:
@Nix: Grazie della risposta, ma non ho ben capito la storia degli hash e di come potrebbero migliorare la situazione.
L'hash serve perché in realtà quella tecnica non ha molto senso in questo caso. Se ti preoccupa che uno può mandare i dati fuori dalla tua applicazione, bisogna considerare che per farlo è necessario sapere in che formato mandare questi dati (il protocollo), quindi uno dovrebbe comunque sniffare i pacchetti, scoprendo la stringa. Le funzioni hash trasformano dei dati di qualunque dimensione in una stringa di dati di lunghezza costante, e rendono molto difficile risalire ai dati iniziali a partire da quelli finali. Quindi, se tu hashi (correttamente) la stringa segreta insieme ad altri dati, non è possibile risalire alla stringa a partire dall'hash. La stringa segreta rimane dentro al codice, però nei pacchetti non c'è da nessuna parte, quindi sniffando non si può scoprire.
cp94 ha scritto:Hai detto che il server deve inviare un codice (insieme ai pacchetti), e il client deve rispondere con l'hash di codice+id_segreto, ma a cosa mi serve l'hash?
Serve a confermare che quel pacchetto l'ha generato la tua applicazione. Infatti uno che sniffa i pacchetti non può scoprire l'id segreto, che lo sanno la tua applicazione e il server, quindi non può generare quell'hash (ovviamente questo protegge semplicemente dallo sniffing, si può comunque fare del reverse engineering sull'eseguibile). Te l'ho spiegato in modo molto generale, come ho detto l'hash si può usare in diversi modi, se guardi il post di Xeryan c'è una tecninca precisa.