PHP pobieranie wartości zmiennej z adresu URL

Mam następujący skrypt:

<?php

$filePath = “”; // np: pliki/

$fileName = "** lol.pdf **"; //

$fd = fopen($filePath.$fileName,“r”);

$size = filesize($filePath.$fileName);

$contents = fread($fd, filesize($filePath.$fileName));

fclose($fd);

header(“Content-Type: application/octet-stream”);

header(“Content-Length: $size;”);

header(“Content-Disposition: attachment; filename=$fileName”);

echo $contents;

?>

zapisany jest on jako download.php ,

pobiera on z strony www plik lol.pdf,

i daje mi opcje wyboru co chce zrobić z plikiem, otworzyć czy zapisać.

Chciałbym tak przerobić skrypt żeby nazwę pliku pobierał on z adresu URL

np:

www. " moja strona".yoyo.pl/download.php/" zmienna" czyli dany plik pdf, np: lol.pdf

Proszę o pomoc :slight_smile:

Po co tworzysz dwa tematy jak możesz wszystko załatwić w jednym? :?

pobieranie-plikow-strony-www-przy-uzyciu-skryptu-php-t367139.html

ponieważ nie było żadnego odzewu :frowning:

a teraz trochę chodzi mi o coś innego, mianowicie o pobranie zmiennej do tego skryptu, ponieważ jak on działa to już wiem :slight_smile:

W uproszczeniu:

download.php?zmienna1=x&zmienna2=y

$zmienna1=$_GET[‘zmienna1’];

$zmienna2=$_GET[‘zmienna2’];

http://www.php.net/manual/pl/reserved.variables.get.php

"api"dziękuję za pomoc, Działa :smiley:

zmieniałem z

<?php

$filePath = “”; // np: pliki/

$fileName = “lol.pdf”; //

na

<?php

$filePath = “”; // np: pliki/

$fileName = $down=$_GET[‘down’];;

i w przeglądarce wywołuje jaki plik chcę

www. “moja strona”.yoyo.pl/download.php?down=lol.pdf

temat do zamknięcia

Myślę, że naprawdę nie chcesz żeby to było zrobione w ten sposób.

ja też sądzę, że “On jeszcze nie wie …” :evil:

krasnaaal bezwzględnie poczytaj o bezpieczeństwie z skryptach php! Chociażby pięć pierwszych linków w google.

Użytkownik strony może w adresie napisać dowolną wartość np. www. “moja strona”.yoyo.pl/download.php?down=plik_z_haslami.txt :slight_smile: albo jakiekolwiek inne.

Zawsze kiedy korzystasz ze zmiennych globalnych MUSISZ je weryfikować, i albo sprawdzać ich wartość: porównując w tablicy, albo używając np. funkcji switch (wszystko zależy od potrzeb) i czyścić ze znaków, które pozwoliłyby podstępnemu użytkownikowi umieścić poprzez zapytanie swój kod wewnątrz Twojego co może się skończyć bardzo źle :slight_smile:

Więc ponawiam: poczytaj o bezpieczeństwie w skryptach php :slight_smile:

To że napisałem “w uproszczeniu”, wcale nie znaczy że dokładnie tak ma być.

Jak koledzy słuśznie zauważyli, trzeba sprawdzać wszystkie dane otrzymywane z zewnątrz, bo inaczej ktoś Ci moze niezłą roz…e zrobić.

zainteresuj się np. funkcją preg_match

Poza tym

$fileName = $down=$_GET['down'];;

nawet jak by się uprzeć przy takim czymś, to i tak o jeden srednik za dużo i na co ta zmienna $down przepisywana na $fileName?

Weź się za jakiś kurs php by podstawy załapać, bo aż strach.

no faktycznie niepotrzebnie, poprawiłem na:

<?php

$filePath = “”;

$fileName = $_GET[‘down’];

faktycznie niebezpieczna metoda,

można pobrać każdy plik

www. “moja strona”.yoyo.pl/download.php?down=“dowolny plik”

ale na szczęście nie mam tam żadnej bazy danych ani zapisanych haseł :slight_smile:

szukałem czegoś na temat tej metody, ale brakuje mi podstaw, żeby zrozumieć przykładowy kod :frowning:

fajne było by gdyby można było deklarować dozwolone pliki do ściągnięcia z pliku .txt (tak na przyszłość)

np: dozwolone.txt

lol1.pdf

lol2.pdf

lol3.pdf

Proszę o pomoc :slight_smile:

A dlaczego chcesz deklarować dozwolone pliki w pliku tekstowym? Nie lepiej zdefiniować je sobie gdzieś w PHP, np. jako tablicę? A potem sprawdzać czy dozwolony plik znajduje się w tej tablicy. Choć z drugiej strony jest to trochę bez sensu, bo każdy nowy plik oznacza konieczność dopisania kolejnej nazwy na liście dozwolonych.

W celu prostego zabezpieczenia proponowałbym:

  1. Utworzyć tablicę w PHP z listą rozszerzeń jakie są możliwe do ściągania (np. pdf, txt, zip…).

  2. Utworzyć sobie jeden podkatalog w którym będą wyłącznie pliki do ściągnięcia.

  3. Przy pobieraniu pliku z parametru w $_GET użyć funkcji basename() która zwróci wyłącznie nazwę pliku - więc jeśli ktoś wpisze tam ścieżkę to i tak niczego nie da.

  4. Mając czystą nazwę pliku sprawdzić czy jego rozszerzenie znajduje się na liście dozwolonych (analogicznie można zrobić zamiast tego listę rozszerzeń wykluczonych - jak kto woli).

  5. Jeśli rozszerzenie jest ok to przekierować do podkatalogu zdefiniowanego jako ten z plikami do ściągnięcia i uzupełnić ścieżkę o sprawdzoną uprzednio nazwę pliku i dopuścić do jego ściągnięcia.

W ten prosty sposób mamy załatwione dwie sprawy:

  • definiujemy jakie rozszerzenia można ściągać lub jakich ściągać nie wolno

  • ustalamy jeden katalog jako źródło plików do ściągnięcia uniemożliwiając tym samym skakanie po zasobach serwisu i ściąganie plików z dowolnych lokalizacji