Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Zabezpieczenie plikow przed pobraniem
Forum PHP.pl > Forum > PHP
jol.us_
Szukam sprawdzonej metody ograniczenie upload'u plikow. Chodzi o to aby osoba, ktora nie przeszla autoryzacji nie mogla pobrac plikow z okreslonego katalogu. Jezeli ktos przejdzie autoryzacje to ma dostep do pliku poprzez zwyklego linka.

Do tej pory zabezpieczalem pliki umieszczajac je w bazie danych i sprawa byla prosta, ale teraz musze to trzymac w katalogu na serwerze. Myslalem zeby moze nadac jakas tymczasowa nazwe w tymczasowym katalogu ale skad niby mialbym wiedziec kiedy taki plik skasowac (kiedy zakonczy sie pobieranie pliku).

Googlanie i przekopanie postow na forum nic nie dalo sad.gif
popo
proponuje trzymac pliki w katalogu chronionym przed dostepem przez www i wysylac je za pomaca skryptu php tak samo jak z bazy tyle ze czytasz plik z katalogu zamiast z bazy a w bazie pamietasz tylko sciezki z nazwami plikow.
jol.us_
A dalo by sie cos wiecej. Jaki to niby mialby byc katalog? Poza httdocs czy po prostu odpowiedni chmod? W jaki sposob wyswietlic linka? Czy da sie np. wyswietlic tak zabezpieczonego jpg'a czy nie? Moze jakis pseudokod?
dtb
tworzysz tabelke w bazie danych o nazwie 'file_list':

id - unikalne id pliku
file - url do pliku

a potem: pobierz.php?id=ID_PLIKU aby rozpoczac sciaganie

kod pobierz.php:

  1. <?php
  2. if (...) { // tu sprawdza czy user jest zalogowany
  3. $r = mysql_fetch_array(mysql_query('SELECT * FROM file_list WHERE id='.$_GET['id'].''));
  4. if (file_exists($r['file'])) {
  5. header("Content-Type: application/force-download\n");
  6. header('Content-Disposition: attachment; filename='.$r['file']);
  7. readfile($r['file']);
  8. } else {
  9. header("HTTP/1.0 404 Not Found");
  10. }
  11. } else {
  12. header("HTTP/1.0 404 Not Found");
  13. }
  14. ?>
jol.us_
A katalog? chmod? Jesli tak to jaki?

A jesli autoryzacja bedzie na sesji czy tez ciastkach to nie dostane bledu w stylu naglowek juz zostal wyslany?
dtb
z tego co pamieta header'a nie mozna uzyc, gdy juz wyslales do przegladarki jakis tekst, a my nic nie wysylalismy przedtem.
pliki mozesz trzymac w katalogu 'files' a w bazie danych takie cos:

id | file
1 | files/plik.rar
2 | files/download.exe

chmod jest nie istotny. 644 powinno wystarczyc.
jol.us_
chmod jest chyba jednak istotny, aby nikt nie tafil przez przypadek w dobry katalog i dobra nazwe pliku. Pewnie to by bylo trudne, ale nie niemozliwe.
dtb
ustawiasz w pliku .htaccess, ktory jest w folderze files "deny from all" i problem z glowy. nawet znajac sciezke do pliku nie sciagniesz go. jedynie przez pobierz.php
jol.us_
bardzo mi pomogles, dziekuje.
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.