Ho una certa esperienza nella creazione di siti Web basati su PHP con accesso a MySQL, memorizzazione di dettagli utente crittografati, ma tutti gli altri campi sono in chiaro. Il mio progetto più recente richiederà la memorizzazione di dati sensibili nel database.
Voglio configurare un sistema in cui un utente può accedere alle proprie voci e vedere i risultati in testo semplice, ma anche se fosse in grado di accedere a qualcun altro sarebbero stringhe crittografate e incomprensibili.
Ho un'idea di come ottenerlo, ma forse non è ottimale o esistono strumenti per farlo già in un modo più efficiente.
1.) Memorizza nome utente come testo normale e hash password con sha1 () o algoritmo di hashing migliore più sale casuale ecc.
2.) Prendere la password dell'utente (non quella con l'hash, ma quella digitata) e utilizzarla definire una chiave specifica per tale nome utente e password, che verrà quindi memorizzata come variabile di sessione. Dato che la chiave non viene mai memorizzata da nessuna parte tranne che nella testa dell'utente (nella forma in cui conosce la sua password in testo semplice, che verrà convertita in una chiave in qualche modo mescolandola con il suo nome utente e un po 'di sale, hashing, ecc. per accedere) questa dovrebbe essere una buona soluzione, giusto?
3.) Cifra o decifra tutti i dati di quell'utente con quella chiave.
A mio parere, anche se qualcuno ha ottenuto l'accesso al database e ha visto un elenco di nomi utente e password crittografati, non è stato possibile trovare la chiave specifica poiché non è memorizzata da nessuna parte. Pertanto, anche se l'accesso è stato acquisito, non è stato possibile decifrare il contenuto dei campi sensibili del database. Ovviamente sto costruendo dei modi per impedirgli di accedere comunque al database, ma come uno sforzo generale mi sembra una buona serie di passaggi.
Gli esperti possono commentare questo e offrire qualche consiglio? Grazie mille.
Ho postato questo nel forum programmers.SE e mi hanno informato che questa era una posizione migliore per la domanda. Più precisamente, perché non dovrei farlo da solo. Se è così allora quali alternative ci sono?