2012-06-13 24 views
6

Czy ktoś zna dobre rozwiązanie PHP do usunięcia lub lepszego wyczyszczenia pliku z systemu Linux?Bezpieczne usuwanie za pomocą PHP 5.3.x

Scenariusz: Plik jest szyfrowany i zapisywany, gdy pobieranie jest wymagane, plik jest kopiowany do folderu tymczasowego i odszyfrowywany. To już działa.

Ale jak usunąć plik z tymczasowej lokalizacji po wysłaniu do użytkownika?

W mojej głowie mam następujące opcje:

  • Otwórz plik przez „fopen” i napisać do niego (0,1 myśleć bardzo powolny)
  • Zapisz plik na Memcache zamiast dysku twardego (mogą być problem z moim dostawcą usług hostingowych)
  • Zastosowanie somd 3-ty narzędzie pary na poleceń lub jako cron (może być problem, aby zainstalować)

Cel: Usunięcie pliku z twardego dysku, bez możliwości odzyskania (wytrzeć/o verwrite)

+1

Nie można odszyfrować "w locie" i wysłać go zamiast tworzyć tymczasowy plik? –

+0

Na czym polega problem? Bezpieczeństwo jest już wystarczająco trudne, aby uzyskać prawo, gdy wiesz * dokładnie *, co chcesz. – Jon

+0

Pierwsza myśl, która wyskakuje, to użycie unlink() [link] (http://php.net/manual/en/function.unlink.php), której można używać z md5(). Jednak nie jest to czyszczenie i nie jest to najlepsze rozwiązanie. Może wypróbujesz shell_exec()? – AleksanderKseniya

Odpowiedz

5

Prawdopodobnie najlepiej jest, aby nigdy nie zapisać plik w rozszyfrowanej państwa w pierwszej kolejności.

Zamiast tego należy użyć stream filters, aby odszyfrować go w locie i wysłać bezpośrednio do użytkownika końcowego.

Aktualizacja

opcję 1 w rzeczywistości nie jest tak źle, jeśli wziąć pod uwagę ten kod:

$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); 

Mogłeś wybrać /dev/urandom jak dobrze, ale to będzie powolny.

Powiązane problemy