Invio del modulo di elaborazione PHP, come posso proteggere al meglio le informazioni sensibili inviate tramite il modulo?

3

Sto usando PHP 5.6 su Apache 2.4

Ho un modulo che raccoglierà informazioni sensibili sull'utente che devono essere crittografate. La mia attuale soluzione cattura le informazioni sensibili dal POST e immediatamente in un modo crittografa asimmetricamente con una chiave pubblica prima di memorizzarlo nel database. Userò SSL sul sito.

Il mio piano è quello di recuperare la versione crittografata e decrittografare localmente in quanto le informazioni sono necessarie, e quando i dati non sono necessari ulteriormente, ho intenzione di eliminarlo interamente.

Sono preoccupato che se il server è compromesso e un hacker è in grado di sapere che quanto sopra sta succedendo, c'è un'opportunità per l'hacker di scrivere uno script per raccogliere i dati POST prima che io possa elaborarlo e svuotarlo.

Ho esaminato la crittografia delle informazioni prima che il modulo venga inoltrato tramite JavaScript, ma sono preoccupato per il carico della CPU / memoria che causerebbe sul browser.

Esistono modi migliori per assicurarsi che nessuno possa, tramite uno script iniettato, accedere ai dati POST? O sono solo un paranoico in più?

Chiarimento:

Sto crittografando le informazioni sensibili con chiavi pubbliche / private RSA 16.384 bit. La dimensione media del blocco di informazioni è più vicina a 8000 bit, ma il 16,384 bit consente casi di utilizzo estremi.

Solo la chiave pubblica è sul server, elaboro le informazioni in un array JSON e quindi utilizzo la funzione openssl_public_encrypt() di PHP. Quindi memorizzo il blocco crittografato in MySQL.

Durante la decrittografia delle informazioni per l'uso, scarica il blocco crittografato tramite un portale di amministrazione sicuro (HTTPS, token CSRF, confronto delle password di hash riciclato unidirezionale) e decrittografia utilizzando una libreria basata su JavaScript sul mio computer locale.

Questo è il mio caso peggiore

Prima di questo progetto, avrei concordato con il sentimento che se un hacker si trova sul mio sistema, allora ho problemi più grandi. Tuttavia, un hacker che annusa queste informazioni prima della crittografia è esattamente il problema più grande che ho. Non è CC # s, lo sto gestendo tramite Stripe e compatibile al 100% PCI.

Tuttavia, avrei la stessa responsabilità, se non maggiore, se queste informazioni fossero state compromesse.

Questo è il motivo per cui andrò a tali estremi come gestire la decrittografia localmente. Ho letto i principi di conformità PCI, in modo tale che le informazioni sensibili debbano essere crittografate durante il transito e l'archiviazione, ma sembra esserci una lacuna durante l'elaborazione anche lì. Se mi sbaglio, per favore, fai riferimento alla documentazione, così posso istruirmi meglio.

    
posta Practically 20.10.2015 - 05:34
fonte

2 risposte

1

Non usare una nuova soluzione, riutilizzare ciò che gli altri hanno fatto. Un buon punto di partenza è OWASP .

Per il trasporto, usa SSL e non gestisci alcun tipo di crittografia sul browser.

Una volta che i dati arrivano sul tuo server, valuta se archiviarli crittografati e quali rischi esattamente vuoi evitare crittografandoli. Questo guiderà l'architettura della crittografia (prevenzione dei furti fisici? Prevenzione dell'accesso amministrativo? ...).

E quindi, la chiave assolutamente è assicurarsi che l'applicazione sia codificata correttamente. Il link OWASP in alto ti indicherà casi generici e soluzioni specifiche di implementazione (per PHP per esempio)

    
risposta data 20.10.2015 - 12:32
fonte
0

Se hai seguito i metodi di sicurezza per impostare i moduli ( Guida alla sicurezza di PHP: elaborazione dei moduli ) e hai fatto , inoltre, quello che hai affermato sopra (crittografia pubblica + HTTPS) è già buono.

Ma per quanto riguarda:

I am worried that if the server is compromised and a hacker is capable of knowing that the above is going on, there is an opportunity for the hacker to write a script to collect the POST data before I can process and empty it.

Se hai raggiunto la situazione in cui il tuo server è compromesso, avrai più cose serie di cui preoccuparti piuttosto che solo cosa fare per impedire che l'attaccante raccolga i dati POST.

Ti suggerisco di dire come gestisci le chiavi (di crittografia) in termini di dove li memorizzi e se usi o meno la stessa chiave per decifrare per tutti gli utenti o usi una chiave per utente (anche se penso che tu collabori con la prima opzione), dopo avrò modificato questa risposta. È meglio avere l'atteggiamento paranoico di quello che non mi interessa.

    
risposta data 20.10.2015 - 08:43
fonte

Leggi altre domande sui tag