Come minimizzare il rischio di dati sensibili in file temporanei in ambiente di hosting condiviso prima della crittografia?

1

openssl_pkcs7_encrypt() richiede che i dati vengano crittografati per essere letti da un file e quindi sfortunatamente richiede che i dati sensibili vengano scritti nel file temporaneo prima che sia crittografato.

In un ambiente di hosting condiviso, quali passi posso intraprendere per minimizzare il rischio che i dati sensibili vengano letti / rubati quando si deve scrivere temporaneamente in un file temporaneo?

Il codice:

$file = tempnam(sys_get_temp_dir(), 'mail');
file_put_contents($file, $body);
$encrypted = tempnam(sys_get_temp_dir(), 'encrypted');
if (openssl_pkcs7_encrypt($file, $encrypted, "cert.pem", NULL)) {
    @unlink($file);
    $body = file_get_contents($encrypted);
    @unlink($encrypted);
} else {
    @unlink($file);
    @unlink($encrypted);
}

Le poche cose che mi riguardano sono:

  • sys_get_temp_dir() a seconda dell'ambiente / host, questo può variare.
  • Chiamerebbe file_put_contents($file, ""); prima che @unlink($file) faccia la differenza?
  • Immagino che un throw…catch attorno a tutto con le chiamate @unlink possa anche aiutare
posta Prembo 21.01.2014 - 16:25
fonte

3 risposte

3

Se non controlli l'hardware, il rischio è enorme, qualunque cosa tu faccia. I valori potrebbero essere tirati fuori da una discarica della memoria se qualcuno lo desiderava davvero. Anche se riesci a far esistere il file temporaneo solo per un breve periodo, devi comunque preoccuparti di eliminarlo in modo sicuro poiché la cancellazione di un file non cancella i dati, ma segna solo lo spazio disponibile. È, infatti, probabilmente più pericoloso eliminare il file, in quanto i settori diventano disponibili per un potenziale utente da un altro utente. Devi praticamente affidarti al provider di hosting per fornire l'isolamento e assicurarti di cancellare il file in modo sicuro dopo averlo fatto.

    
risposta data 21.01.2014 - 16:39
fonte
2

Se puoi permetterti di avere il tuo "servizio sicuro" all'interno di un hosing condiviso, sono sicuro che puoi permetterti di avere una copia temporanea del suo testo in chiaro mentre nel frattempo lo stai cifrando.

Se alla fine hai bisogno di un approccio più limitato e sicuro, dovrai pensare a possedere il tuo hardware.

    
risposta data 21.01.2014 - 16:55
fonte
2

Se si presume che l'attaccante sia l'host web, il gioco è finito.

Supponiamo che il tuo attaccante sia un altro script PHP in esecuzione sulla stessa istanza di Apache. A meno che tu non stia utilizzando setUID come te stesso, tutti i server virtuali verranno eseguiti come utente Apache e potranno accedere ai file temporanei degli altri.

Per risolvere questo devi eseguire la tua istanza del binario PHP e configurare il tuo .htaccess per usarlo al posto di mod_php (che potrebbe anche non essere possibile, non sono un esperto di apache).

In alternativa potresti essere in grado di usare suPHP, mod_suid2, mod_ruid o simili.

Se davvero non hai scelta, allora almeno rendi i tuoi nomi di file temporanei un po 'più casuali, usando mt_rand() per generare la radice.

Ma in realtà, se la sicurezza è un problema, dovresti cercare almeno il tuo server virtuale.

    
risposta data 21.01.2014 - 17:23
fonte

Leggi altre domande sui tag