2012-06-13 14 views
6

Qualcuno conosce una buona soluzione PHP per eliminare o cancellare un file da un sistema Linux?Eliminazione sicura con PHP 5.3.x

Scenario: Il file viene crittografato e salvato, quando viene richiesto un download, il file viene copiato in una cartella temporanea e decrittografato. Questo sta già funzionando.

Ma come rimuovere il file dalla posizione temporanea dopo l'invio all'utente?

Nella mia mente ho le seguenti opzioni:

  • Aprire il file tramite "fopen" e scrivere 0,1 in esso (si pensi molto lento)
  • Salva file in memcache invece di harddisk (potrei essere un problema con il mio hoster)
  • Usa somd strumento pary 3 ° sulla riga di comando o come cronjob (potrebbe essere un problema per l'installazione)

obiettivo: Eliminare il file dal disco rigido, senza la possibilità di recuperare (wipe/o VERWRITE)

+1

Non puoi decifrare al volo e inviarlo invece di creare un file temporaneo? –

+0

Qual è il problema da risolvere qui? La sicurezza è già abbastanza difficile da ottenere quando sai esattamente cosa vuoi. – Jon

+0

Il primo pensiero che emerge è l'uso di unlink() [link] (http://php.net/manual/en/function.unlink.php), che puoi usare anche con md5(). Tuttavia, questo non è un wipe e non è la soluzione migliore. Forse prova shell_exec()? – AleksanderKseniya

risposta

7

chiamata "shred" tramite exec/Sistema/passante

5

Probabilmente la cosa migliore è non salvare il file nel suo stato decifrato, in primo luogo.

Piuttosto, utilizzare stream filters per decrittografarlo al volo e inviarlo direttamente all'utente finale.

Aggiornamento

L'opzione 1 non è in realtà troppo male se si considera questo codice:

$filename = 'path/to/file'; 
$size = filesize($filename); 

$src = fopen('/dev/zero', 'rb'); 
$dest = fopen('/path/to/file', 'wb'); 

stream_copy_to_stream($src, $dest, $size); 

fclose($src); 
fclose($dest); 

Si potrebbe scegliere /dev/urandom pure, ma che sarà lenta.

Problemi correlati