Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] pobieranie pliku po zalogowaniu się
Forum PHP.pl > Forum > PHP
jarmiar
Wiem że było kilka już takiech tematów na forum, więc postanowiłem napisać jeszcze jeden, który rozwiąże Wasze wątpliwości.

Wiele z Was pyta jak zabezpieczyć plik przed ściągnieciem przez nieupoważnione osoby?

Zaczynamy!

Do tego napisałem prosty skrypt, który pozwoli to wykonać:

http://url.bee.pl/uyf

(pozwoliłem sobie na podanie adresu do pliku na serwerze, ponieważ przy wpisywaniu tego kodu na forum, skrypt doklejał niepotrzebne tagi co mogłoby być przyczyną niewłaściwego działania kodu)

Teraz chcąc pobrać jakiś plik musimy wskazać adres w przeglądarce:

skrypt.php?id=nazwa_pliku.zip

Jeżeli użytkownik wskazujący plik będzie zalogowany to będzie mógł go ściągnąć. Jeśli będzie odwrotnie pojawi mu się stosowny komunikat.
Co prawda ten skrypt można znacząco rozbudować, ja jednak podałem tylko wzór.

Mam nadzięję, że ten post pomógł Wam!

Pozdrawiam smile.gif
Jarmiar
^bmb
nazwa pliku w parametrze GET? smile.gif)))))))
Weź może chociaz waliduj to co przychodzi w tym parametrze bo jak w takim stanie skryptu bedziesz uzywal to ci sciagna pare innych rzeczy niz to co myslisz winksmiley.jpg
jarmiar
Cytat(^bmb @ 7.06.2007, 13:41:47 ) *
nazwa pliku w parametrze GET? smile.gif )))))))
Weź może chociaz waliduj to co przychodzi w tym parametrze bo jak w takim stanie skryptu bedziesz uzywal to ci sciagna pare innych rzeczy niz to co myslisz winksmiley.jpg



patrzyłeś uważnie na zawartośc skryptu?questionmark.gif

nie sądze!

wydzieliłem tam specjalną zmienną $sciezka i ona będzie prowadziła do katalogu z plikami, które będzie można ściągnąć po zalogowaniu się winksmiley.jpg
^bmb
Cytat(jarmiar @ 7.06.2007, 11:46:10 ) *
patrzyłeś uważnie na zawartośc skryptu?questionmark.gif

nie sądze!

wydzieliłem tam specjalną zmienną $sciezka i ona będzie prowadziła do katalogu z plikami, które będzie można ściągnąć po zalogowaniu się winksmiley.jpg


wiec nie zadziała np. skrypt.php?id=../../<twoj_skrypt> ?

smile.gif
jarmiar
Cytat(^bmb @ 7.06.2007, 13:52:03 ) *
wiec nie zadziała np. skrypt.php?id=../../<twoj_skrypt> ?

smile.gif



jasne że w ten sposób można sciągnąć parę plików, ale kto będzie się w to bawiłquestionmark.gifexclamation.gif

a po drugie nawet gdyby ściągnąć coś chciał to musi znać strukturę katalogów na serwerze i przy ściaganiu plików php nie zobaczy kodu php tylko wygenerowany przez zerwer kod html.

więc myślę że jest wystarczający ten mój skrypt.
^bmb
Cytat(jarmiar @ 7.06.2007, 11:56:06 ) *
jasne że w ten sposób można sciągnąć parę plików, ale kto będzie się w to bawiłquestionmark.gifexclamation.gif


Możesz mi wierzyć że jest sporo ludzi którzy lubią się tak pobawić smile.gif

Cytat(jarmiar @ 7.06.2007, 11:56:06 ) *
a po drugie nawet gdyby ściągnąć coś chciał to musi znać strukturę katalogów na serwerze i przy ściaganiu plików php nie zobaczy kodu php tylko wygenerowany przez zerwer kod html.


A co stoi na przeszkodzie żeby popróbować kilka razy z ilościa np ../

Cytat(jarmiar @ 7.06.2007, 11:56:06 ) *
więc myślę że jest wystarczający ten mój skrypt.


Spoko Twoja sprawa...zależy kogo uważasz za grupę docelowąsmile.gif

Zresztą może inni użytkownicy się wypowiedzą
Pozdrawiam smile.gif
Darti
Jest:
  1. <?php
  2. header('Content-Disposition: attachment; filename='.$sciezka.'/'.$id);
  3. ?>

powinno być:
  1. <?php
  2. header('Content-Disposition: attachment; filename="'.$sciezka.'/'.$id.'"');
  3. ?>


Poza tym na dorzuciłbym jakiś readfile(); bo użytkownik dostanie plik ... ale o wielkości 0 kB blinksmiley.gif
No i dodał bym:
  1. <?php
  2. header("Content-Length: ". filesize($sciezka.'/'.$id));
  3. ?>
coby użytkownik wiedział jakiej długości dostanie plik i miał fajny pasek pobierania.
Mime-Type tez przydało by się zmienić na akurat wysyłany plik ...

edit:
Zapomniałem jeszcze o sytuacji kiedy nazwa pliku zawiera spację winksmiley.jpg

I na koniec: dopisuję się do uwag ^bmb
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.