Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Problem z pobieraniem mp3 z serwera
Kiubus
post
Post #1





Grupa: Zarejestrowani
Postów: 34
Pomógł: 0
Dołączył: 11.10.2010

Ostrzeżenie: (0%)
-----


Witam.
Mam na swoim serwerze pliki w formacie MP3. Chciałbym, aby była możliwość ich pobrania. Próbowałem zrobić po prostu w HTML (a href...) ale to otwiera nowe okienko. Znalazłem na internecie skrypt download.php:
  1. <?php
  2. if (isset($_GET['file']) && substr($_GET['file'], -3)=='mp3') {
  3. header('Content-type: application/x-download');
  4. header('Content-Disposition: filename="'.$_GET['file'].'"');
  5. readfile($_GET['file'] );
  6. }
  7. ?>

Po jego użyciu nakazano stosować adres do hrefa w stylu:
  1. <a href="download.php?file=plik.mp3">

Ogólnie to działa, tylko, że na 4 linki pobiera tylko 1 piosenkę do odsłuchu, resztę ściąga rozmiarze np. 23 bajtów gdzie utwór ma rozmiar 2,29 MB. Czy ktoś może mi pomóc?
Pozdrawiam!
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
by_ikar
post
Post #2





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

Ostrzeżenie: (0%)
-----


Jest podatny na atak directory traversal, najprościej można zabezpieczyć taki skrypt poprzez basename który zawsze zwróci tylko nazwę pliku, zamiast pełnej ścieżki, dzięki czemu nikt nie będzie mógł się "wydostać" poza katalog w którym będziesz miał pliki do pobrania. Bo w ten sposób można pobrać cały twój kod ze strony, łącznie z konfiguracją (np dostępem do bazy danych).

  1. <?php
  2.  
  3. if(isset($_GET['file']) && substr($_GET['file'], -3)=='mp3')
  4. {
  5. $file = basename($_GET['file']);
  6.  
  7. header('Content-Type: application/octet-stream');
  8. header('Content-Transfer-Encoding: Binary');
  9. header('Content-disposition: attachment; filename="'.$file.'"');
  10. header('Content-Length: '.filesize($file));
  11.  
  12. readfile($file);
  13. }
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 28.12.2025 - 12:55