Archivia i dettagli della carta su qualsiasi supporto di persistenza (database, qualunque cosa), ma crittografa il numero della carta con un unico e casuale chiave memorizzata nella sessione. In questo modo, se la sessione viene persa, lo è anche la chiave, che ti dà abbastanza tempo per ripulire i dati scaduti/abbandonati.
Assicurati inoltre che le tue sessioni siano protette dal dirottamento. Esistono soluzioni hardware per questo, ma un modo semplice in-code consiste nel collegare l'ID di sessione a un hash del primo ottetto dell'IP più l'agente utente. Non infallibile ma aiuta.
Modifica :La chiave per ridurre al minimo il rischio è assicurarsi di sbarazzarsi di tali informazioni il prima possibile. Subito dopo che la transazione è andata a buon fine, elimina il record dal database. È inoltre necessario un processo in sequenza (ad esempio ogni 5 minuti) che elimini tutti i record precedenti al timeout della sessione (in genere 20 minuti). Inoltre, se stai usando un database per questo molto dati temporanei, assicurati che non siano su un sistema di backup automatico.
Ancora una volta, questa soluzione non è infallibile e non sono nemmeno sicuro al 100% che sia conforme ai requisiti di sicurezza CC. Tuttavia, dovrebbe richiedere che un utente malintenzionato abbia il controllo totale del runtime del tuo ambiente per decrittografare attivamente le informazioni CC dei clienti e, se uno snapshot del tuo database è compromesso (molto più probabile/comune), è possibile forzare brutalmente un solo CC alla volta, che è il meglio che puoi sperare.