![]() ![]() |
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:
Po jego użyciu nakazano stosować adres do hrefa w stylu:
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! |
|
|
|
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 2 885 Pomógł: 463 Dołączył: 3.10.2009 Skąd: Wrocław Ostrzeżenie: (0%)
|
Generalnie uważałbym bardzo na ten skrypt - ma potencjalną lukę w bezpieczeństwie, ponieważ w żaden sposób nie filtrujesz danych wejściowych ($_GET['file']). Co będzie w przypadku, jeśli ktoś poda w nazwie pliku ../../../.htpasswd ?
Polecam Ci stworzyć jakiś mechanizm zabezpieczający dane na serwerze, a przede wszystkim filtrowanie danych wejściowych. Nie mam też pewności czy masz kompletne nagłówki czy nie powinno być mniej więcej coś takiego: header ("Content-disposition: attachment; filename=".$file.";"); header("Content-Length: ".filesize($file)); oczywiście $file jest przefiltrowaną wcześniej lokalizacją pliku wraz z jego nazwą. Wycinałbym wszystkie znaki specjalne oraz zagrywki typu ../.. oraz ~ i / |
|
|
|
Post
#3
|
|
|
Grupa: Zarejestrowani Postów: 34 Pomógł: 0 Dołączył: 11.10.2010 Ostrzeżenie: (0%)
|
Wiem, ze skrypt moze byc dziurawy, ale niezbyt mam pomysl jak zrobic dobrze to pobieranie bo tak jak wspomnialem href mnie nie urzadza. Bez hrefa jest ciezko i zostaje tylko php i dlatego potrzebuje pomocy (IMG:style_emoticons/default/wink.gif)
|
|
|
|
Post
#4
|
|
|
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).
|
|
|
|
Post
#5
|
|
|
Grupa: Zarejestrowani Postów: 34 Pomógł: 0 Dołączył: 11.10.2010 Ostrzeżenie: (0%)
|
Ok, dzięki za podpowiedź odnośnie zabezpieczeń. A co do mojego drugiego problemu macie jakąś radę? 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? Pliki nie są uszkodzone, bo normalnie działają, w całości zostały przesłane na serwer a jest jak jest ;/
|
|
|
|
Post
#6
|
|
|
Grupa: Zarejestrowani Postów: 1 798 Pomógł: 307 Dołączył: 13.05.2009 Skąd: Gubin/Wrocław Ostrzeżenie: (0%)
|
Jeżeli pobiera ci tylko niektóre pliki, to raczej już nie jest wina skryptu samego w sobie. Może te pliki są uszkodzone czy może połączenie ci zrywa - ciężko stwierdzić..
|
|
|
|
Post
#7
|
|
|
Grupa: Zarejestrowani Postów: 6 809 Pomógł: 1828 Dołączył: 11.03.2014 Ostrzeżenie: (0%)
|
|
|
|
|
Post
#8
|
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%)
|
|
|
|
|
Post
#9
|
|
|
Grupa: Zarejestrowani Postów: 34 Pomógł: 0 Dołączył: 11.10.2010 Ostrzeżenie: (0%)
|
Jeżeli pobiera ci tylko niektóre pliki, to raczej już nie jest wina skryptu samego w sobie. Może te pliki są uszkodzone czy może połączenie ci zrywa - ciężko stwierdzić.. Pliki działają, sprawdzałem je na komputerze przed wysłaniem. Wysyłałem każdy z osobna, żeby mieć pewność, że przesłały się całe - przesłały się całe a jest jak jest. Połączenia nie zrywa, bo tak już występuje u dwóch osób. Podejrzyj edytorem tekstu taki 23 bajtowy plik. Plik ma format MP3, w winampie ma długość 0:00, po otworzeniu Notepadem jest pusty. Problem jest taki, że plik zostaje ściągnięty, ale tak jakby jego minimalna część. Jest to piosenka w formacie mp3 o wadze np. 2 MB, a pobiera 23 bajty. |
|
|
|
Post
#10
|
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%)
|
|
|
|
|
Post
#11
|
|
|
Grupa: Zarejestrowani Postów: 4 291 Pomógł: 829 Dołączył: 14.02.2009 Skąd: łódź Ostrzeżenie: (0%)
|
|
|
|
|
Post
#12
|
|
|
Grupa: Zarejestrowani Postów: 34 Pomógł: 0 Dołączył: 11.10.2010 Ostrzeżenie: (0%)
|
dodałem w pliku html przed <head> tą linijkę co pisaliście, ale nic nie zauważyłem na stronie.
|
|
|
|
Post
#13
|
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%)
|
nie przed <head> tylko header('....
|
|
|
|
Post
#14
|
|
|
Grupa: Zarejestrowani Postów: 34 Pomógł: 0 Dołączył: 11.10.2010 Ostrzeżenie: (0%)
|
|
|
|
|
Post
#15
|
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%)
|
i czy na pewno masz taki plik dokładnie w tym samym miejscu w którym plik PHP ?
|
|
|
|
Post
#16
|
|
|
Grupa: Zarejestrowani Postów: 34 Pomógł: 0 Dołączył: 11.10.2010 Ostrzeżenie: (0%)
|
dokładnie tak, wszystkie pliki strony + mp3 i skrypt download.php są w jednym folderze.
@edit Problem został rozwiązany. Gdyby kiedyś ktoś miał podobny problem, to z nazw pobieranych plików wystarczy usunąć polskie znaki i z hiperłącza również (IMG:style_emoticons/default/smile.gif) Dzięki wszystkim za pomoc! Ten post edytował Kiubus 9.08.2014, 09:59:27 |
|
|
|
![]() ![]() |
|
Aktualny czas: 22.12.2025 - 23:17 |