Dati del quiz crittografati in PHP e JS

1

Sto sviluppando un quiz con il quale puoi vincere alcuni fantastici premi. Quindi temo che qualcuno possa provare a modificarlo / manipolarlo.

Tutti i partecipanti devono essere loggati e il sito web prende 15 domande dal db, da loro a Javascript, che dipingerà quindi il quiz. Quando un utente finisce tutte le domande o risponde a una falso, il quiz effettua una chiamata Ajax al back-end e inserisce i punti nel db.

Per decidere quale risposta (ci sono sempre 4) è corretta, il quiz deve sapere quale è corretto. Questi dati sono forniti come stringa codificata Base64 e quindi decodificati in Javascript.
Domanda 1: Questo è sicuro? Ci sono modi migliori?

Sempre all'avvio del quiz, salvi l'ID del quiz nel database. Quando viene effettuata la chiamata Ajax finale, controllo tale id, controllo se le risposte date sono quelle associate al quiz (e l'ordine di esse), controllo un token (ce n'è uno nella sessione e uno in Javascript , entrambi generati in base al quiz e ad alcuni valori di sale, vengono generati usando md5, sha1 e substr in PHP)
Domanda 2: Questo è sicuro? Ci sono modi migliori? Mi sono perso qualcosa?

    
posta wawa 23.01.2015 - 11:59
fonte

1 risposta

9

Il tuo meccanismo proposto non è sicuro.

Tutto ciò che è disponibile per JavaScript è disponibile per la persona che esegue il browser client. La codifica Base64 oscura solo leggermente le risposte. Anche la loro crittografia con crittografia strong come AES non funzionerà perché JavaScript deve avere la chiave.

Qualcuno potrebbe risolvere il problema di trovare Base64 o crittografia? Dipende da come i fantastici premi sono ed è comunque la sicurezza dall'oscurità.

Puoi affrontarlo in due modi. Il modo più semplice è inviare tutte le risposte al server alla fine del quiz e controllarle sul server con PHP. Se desideri fornire un feedback per ogni domanda, dovresti effettuare una chiamata Ajax dopo che ogni domanda ha avuto risposta.

Non posso davvero parlare della tua seconda domanda perché non ci sono abbastanza dettagli. Tuttavia, tutto relativo alla sicurezza deve essere fatto sul server. Puoi passare un ID sessione opaco avanti e indietro tra server e client, ma non puoi fare nulla sul client che costituisce una base per la sicurezza del sistema.

Infine, mi preoccupo di "alcuni valori di sale". La rotazione della tua crittografia è non sicura a meno che tu non abbia un dottorato di ricerca. in matematica e dieci o più anni di esperienza con la crittografia.

    
risposta data 23.01.2015 - 12:37
fonte

Leggi altre domande sui tag