2012-11-21 18 views
7

Un po 'di sfondo -È sicuro archiviare le password in chiaro in MySQL * temporaneamente *?

Gestisco un server di giochi che gira in Java e un forum che gira in PHP (phpbb). Ho collegato gli account del gioco e del forum, in modo tale che la modifica della password nel gioco cambi automaticamente la password per l'account del forum. I due sistemi usano diversi algoritmi di hashing della password, e ho bisogno di aggiornare l'hash della password sul lato del forum usando le funzioni built-in di phpbb, il che significa che devo chiamarli da uno script PHP (piuttosto che eseguire il mio codice).

Per fare questo, ho deciso di chiamare Java lo script PHP effettuando una richiesta HTTP allo script PHP ogni volta che è necessario modificare la password, per attivare uno script PHP che completa il processo di modifica della password per il account del forum. Tuttavia, non voglio mettere la password in chiaro in nessuna chiamata HTTP, poiché potrebbe apparire nei file di log e forse in altre aree sfruttabili. La mia idea attuale è che quando il lato Java sta cambiando le password, inserisce la nuova password in chiaro in una tabella di database e quindi fa una richiesta HTTP per attivare lo script PHP, in modo che nessun hash o informazione sensibile vada nella richiesta HTTP. La chiamata HTTP passerebbe solo il nome utente dell'account da modificare e un hash MD5 di un segreto condiviso più il nome utente, per l'autenticazione. Quando lo script PHP viene eseguito, recupera la nuova password in chiaro per l'utente dal database, la elimina immediatamente, quindi esegue la password in chiaro tramite l'algoritmo di hashing di phpbb e aggiorna il database del forum.

In condizioni normali, la password in chiaro dovrebbe essere nel database per meno di un secondo prima di essere eliminata. Idealmente, non lo memorizzerei da nessuna parte, ma non so in quale altro modo comunicare il cambiamento necessario da Java a PHP quando non posso prevedere quale sarà l'hash della password del forum, quindi devo in qualche modo inviare il password in chiaro allo script PHP che esegue l'hashing.

Qualche idea su un modo migliore per farlo, o c'è un feedback sulla memorizzazione della password in chiaro per un periodo di tempo molto breve? Considero il login MySQL sicuro e non condiviso con altre persone o progetti.

Grazie!

+3

È possibile crittografarlo da Java appena prima di memorizzarlo nel DB e decodificarlo da PHP subito dopo averlo letto dal DB? – 0xFE

+2

La crittografia è una buona idea, dal momento che apparentemente hai già un segreto condiviso. Che dire semplicemente inviando il nome utente e la password in testo in chiaro a PHP tramite HTTPS e POST, come i dati del modulo? – slashingweapon

+4

Ancora meglio, crea un plugin di autenticazione personalizzato per PHP BB https://wiki.phpbb.com/Authentication_plugins Supporta schemi di autenticazione password personalizzati e dovrebbe consentire di sfruttare il Single Sign-On, se applicabile. –

risposta

0

La crittografia è la via.

  • Connessione crittografata: sinonimo di HTTPS. Passa i dati a phpbb usando HTTPS, se il tuo server lo supporta.
  • Dati crittografati: crittografare la password e archiviare in qualche modo la chiave (molto insicura) o utilizzare la crittografia asimmetrica. Vedere la risposta allo my question per una buona conoscenza di come inviare la password su un canale sicuro.
+0

Per il mio caso particolare, questo metodo funziona al meglio, in quanto richiede la minor quantità di lavoro. Sto prendendo il mio script PHP esistente e lo uso su HTTPS e passando le password che devono essere sottoposte a hashing sulla connessione criptata. – DivideByHero

0

Dipende dal database che si sta utilizzando con Java più di PHP. In PHP utilizzare PDO per connettersi al diverso database e manipolare i dati. Potresti provare semplicemente ad avere un DB come memoria principale per le password e l'altro come salve - a seconda della crittografia inversa.

Avere PHP (ad esempio) DOP la password di testo direttamente nel db Java in un campo temporaneo, specifico per l'utente, ovviamente, e quindi dire a PHP di attivare una funzione Java per leggere quella colonna, cancellarla, aggiornare il colonna corretta ed elimina il campo temporaneo.

Se eseguito correttamente, è possibile che il limite di tempo della vulnerabilità sia limitato a pochi millisecondi.

3

Non archiviare password in chiaro. Se il tuo gioco diventa popolare, potrebbe essere un bersaglio di attacchi costanti degli hacker soprattutto se conterrà un aspetto monetario (vale a dire il caso di World of Warcraft, Travian e altri). In questo caso, è necessario presumere che, sebbene si tenti di proteggere il sistema, , qualcuno potrebbe hackerarlo e ottenere dati sensibili. È necessario utilizzare meccanismi di crittografia standard per eseguire questa attività (ad esempio, inviare la password al sistema del forum tramite HTTPS, ad esempio, in modo sicuro). Ti consiglierei anche di esplorare il commento di @Joshua Kaiser - il single sign on potrebbe essere la chiave per rispondere alle tue esigenze, e non provare a reinventare la ruota qui.Posso dirti che lavoro con kerberos ad esempio, e Kerberos ha un meccanismo di ticket in cui i biglietti possono essere riutilizzati tra le applicazioni. Sfortunatamente non conosco PHP e non so come collegare il framework del forum per utilizzare diversi moduli di autenticazione.

P.S - Ho inviato questa risposta per errore due volte e ho provato a premere "cancella post" - spero che Stackoerflow si occupi di ciò.