Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Plan na przechowywanie plików -proszę o krytykę-
Forum PHP.pl > Forum > Przedszkole
Morfi777
Hej!

Chciałem napisać skrypt do zarządzania plikami w którym nie byłoby ograniczeń co do rodzaju pliku, wobec tego żaden z nich nie może być dostępny pod direct link.
System powinien też móc ograniczyć możliwość ściągnięcia pliku: gościom/użytkownikom/grupom.

Najlepszą opcją zakładam, że byłoby secure_download(nginx) lub mod_secdownload (lighthttpd), ale zakładam, że nie mam dostępu do webserwera a provider jest siusiakiem i nie będzie robił wyjątków ani nie dogra tego.

Chciałbym mieć możliwość wrzucania dowolnych rodzajów plików. Pomysł jest następujący.
Tworzę katalog /files/ który dostaje Auth (zabezpieczenie direct linkowania, jako Auth rozumiem mod_auth w apache lub odpowiednik).
plik dl.php?path=__________ będzie służył do wyciągania plików z katalogu /files/

  1. <?php
  2.  
  3. function CheckAuth($sess)
  4. {
  5. ble ble ble...
  6. return $dir;
  7. }
  8.  
  9. $access = CheckAuth($_SESSION[costam]);
  10.  
  11. $file = 'files/' . $access . str_replace(array(chr(0),'../'), '', $_GET["file"]);
  12.  
  13. if (file_exists($file)) {
  14. header('Content-Description: File Transfer');
  15. header('Content-Type: application/octet-stream');
  16. header('Content-Disposition: attachment; filename='.basename($file));
  17. header('Content-Transfer-Encoding: binary');
  18. header('Expires: 0');
  19. header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
  20. header('Pragma: public');
  21. header('Content-Length: ' . filesize($file));
  22. flush();
  23.  
  24.  
  25. readfile($file);
  26. }
  27. else
  28. die('no cze');
  29.  
  30. ?>


Plik sprawdza poziom dostępu wrzucając użytkownika do oddzielnego katalogu (oczywiście będzie to rozwiązane mądrzej, ale zamysł ten sam -- przydzielanie dostępu do dir po sesji), geta też nie będzie, ale escape`y zostają.

Listowanie plików z bazy danych (nie z listowania dir).



To taki szybki zamysł, a może mamy coś lepszego ? smile.gif


Dzięki!
vokiel
Ja bym był za listowaniem plików z bazy bo przy tym masz pełno możliwości kontroli dostępu. Do tego, zamiast podawać ścieżkę do pliku i jego nazwę możesz przekazywać id. Czyli linki byłyby mniej jawne, np dl.php?file=28374278234. Ścieżkę do pliku odnajdziesz sobie w bazie po id, przy okazji sprawdzisz uprawnienia itd. Na koniec będziesz miał lepszą kontrolę tego co jest w systemie, kto do czego ma prawa itd. Jakiekolwiek statystyki będą dużo łatwiejsze. Problem może się pojawić tylko wtedy, gdy ktoś ręcznie będzie mieszał w bazie lub na dysku.
Morfi777
Racja, ten ID będzie dużo bezpieczniejszym wyjściem.

Myślałem, też nad zmianą nazw plików po wrzuceniu na ciąg (np md5) tak aby pliki na serwerze były bez rozszerzeń. Dopiero przy pobieraniu, header podrzuci właściwą nazwę pliku.
Pomysł jest Ok, czy za dużo szczęścia na raz?

--
Michał
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.