Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][HTML]Zabezpieczenie pobierania plików
Raptor1
post
Post #1





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 6.09.2005

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


Próbuje zrobić skrypt, który po podaniu właściwego kodu pobiera plik *.wav z serwera ftp zabezpieczonego hasłem. Poniżej przedstawiam kod:
  1. <?php
  2. $plik = $_REQUEST['plik'];
  3. $kod = $_REQUEST['kod'];
  4. $conn = mysql_connect('localhost', 'xxxx', 'xxxx');
  5. mysql_select_db('xxxx', $conn);
  6. $sql = "select count(*) from kod where text_kod = '$kod'";
  7.  
  8. $wprowadz = "
  9.            <form action='download.php' method='post'>
  10.                If you want to download it write kode
  11.                <input type='text' name='kod'>
  12.                <input type='submit' name='sprawdz' value='Send'>
  13.            </form>
  14.        
  15.        ";
  16. if ( $kod != '' )
  17.    {
  18.        list($wiersz) = mysql_fetch_row(mysql_query($sql, $conn));
  19.        if ($wiersz == 1)
  20.            {
  21.                echo "<head><meta http-equiv='refresh' content='0; url=ftp://login:hasło@ścieżka/katalog/$plik'></head>";
  22.            }
  23.            else
  24.            {
  25.                echo $wprowadz;
  26.            }
  27.    }
  28.    else
  29.    {
  30.        echo $wprowadz;
  31.    }
  32. ?>


Oczywiście po uruchomieniu nie pozwala na pobranie pliku a jedynie na odsłuchanie go. Mi chodzi jednak żeby była możliwość pobrania. Próbowałem już z

  1. <?php
  2. header('Content-Disposition: attachment; filename="plik.wav"');
  3. ?>


Ale plik ten jest na ftp z hasłem a poza tym w tym przypadku nie bardzo jest możliwość podania ścieżki.
Może ktoś już się spotkał z tym problemem i ma sprawdzone rozwiązanie ewentualnie jakąś podpowiedź.
Go to the top of the page
+Quote Post
bregovic
post
Post #2





Grupa: Zarejestrowani
Postów: 562
Pomógł: 15
Dołączył: 8.08.2003
Skąd: Denmark/Odense

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


Zdajesz sobie sprawę z tego ze twój kod zdradza każdemu hasło i imię użytkownika do FTP? Jeśli na prawdę musisz używać FTP, zerknij na ftp" title="Zobacz w manualu PHP" target="_manual... Ale FYI, łatwiej będzie jeśli masz te pliki gdzieś na twoim serwerze, i użyjesz PHP do wysyłania ich do użytkowników, wtedy nie będziesz miał problemu z Content-Disposition itp... Pozatym, przefiltruj twoje zmienne:
  1. <?php
  2. $kod = mysql_real_escape_string(trim($_REQUEST['kod']));
  3. ?>


Ten post edytował bregovic 12.11.2008, 02:43:21


--------------------
Prank - for the fun. Mac - for the simplicity. Deviantart - for the kick.
Life is ours, We live it our way -- Metallica
Go to the top of the page
+Quote Post
--Raptor1--
post
Post #3





Goście







Dzięki za odpowiedź. Co do wystawiania loginu i hasła do ftp to to był tylko przykład i zdaje sobię sprawę że tak nie powinno być. Myślałem dziś trochę nad tym i zastanawiam się czy dobrym pomysłem by było użycie curl do stworzenia tymczasowego pliku i dopiero wystawienie go przez php. Jak mi zadziała to wystawie kod dla potomności lub ewentualnej krytyki smile.gif
pozdrawiam
Go to the top of the page
+Quote Post
bim2
post
Post #4





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

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


echo file_get_contents("ftp://login:hasło@ścieżka/katalog/$plik");


--------------------
Go to the top of the page
+Quote Post
bregovic
post
Post #5





Grupa: Zarejestrowani
Postów: 562
Pomógł: 15
Dołączył: 8.08.2003
Skąd: Denmark/Odense

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


Ok, w takim razie zerknij na readfile" title="Zobacz w manualu PHP" target="_manual. Nie wiem jak chcesz użyć do tego curl'a, ale brzmi to trochę nazbyt zaawansowanie w stosunku do problemu - al trudno sie wypowiedzieć bez kodu winksmiley.jpg


--------------------
Prank - for the fun. Mac - for the simplicity. Deviantart - for the kick.
Life is ours, We live it our way -- Metallica
Go to the top of the page
+Quote Post
--Raptor1--
post
Post #6





Goście







Macie racje chyba wystarczy
  1. <?php
  2. ?>
dzięki wielkie za podpowiedzi wieczorkiem potestuje.
Go to the top of the page
+Quote Post
--Raptor1--
post
Post #7





Goście







Zrobiłem coś takiego Działa ale nie do końca i nie wiem czemu.
W jednym pliku
  1. <?php
  2. $Plik_download = "ftp://login:hasło@ścieżka/plik.wav";
  3. $filepath = "temp/test.wav";
  4. $filename = "test.wav";
  5. copy($Plik_download, $filepath);
  6. echo "<head><meta http-equiv='refresh' content='0; url=temp/download2.php?plik_tmp=$filename'></head>";
  7. ?>

W drugim pliku
  1. <?php
  2. $Plik_temp = $_REQUEST['plik_tmp'];
  3. header("Content-Disposition: attachment; filename='$Plik_temp'");
  4. ?>

i teraz tak plik mi się pobiera z ftp zapisuje w katalogu temp pod nazwą test.wav wyskakuje okienko do zapisu pliku zapisuje ale jakby nie pobierał strumienia danych z pliku. Zapisuje mi się jako plik test.wav ale zawsze ma 20 B czyli pokrótce jest pusty sadsmiley02.gif
Może wiecie co może być przyczyną ?
Pozdrawiam
Go to the top of the page
+Quote Post
bregovic
post
Post #8





Grupa: Zarejestrowani
Postów: 562
Pomógł: 15
Dołączył: 8.08.2003
Skąd: Denmark/Odense

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


Tjah, ale w drugim pliku nic nie wysyłasz przecierz? readfile? No i pozatym, poczytaj o header i nagłówku Location. Strasznie koszmarkowo to wygląda...


--------------------
Prank - for the fun. Mac - for the simplicity. Deviantart - for the kick.
Life is ours, We live it our way -- Metallica
Go to the top of the page
+Quote Post
--Raptor1--
post
Post #9





Goście







Nom wiem że najlepszego kodu to ja nie pisze sad.gif Ale mam nadzieje że z czasem mi minie ta ułomność. Dzięki za odpowiedź poczytam popróbuje i napisze jak mi zadziała smile.gif
Go to the top of the page
+Quote Post
--Raptor1--
post
Post #10





Goście







Wreszcie się udało poczytałem obaczyłem przykłady i już wiem co trzeba było zrobić poniżej kod:
  1. <?php
  2. // przesyłana nazwa pliku
  3.  
  4. $Plik_temp = $_REQUEST['plik_tmp'];
  5.  
  6. // nagłówki
  7.  
  8. header("Content-Disposition: attachment; filename=$Plik_temp");
  9. header('Content-Type: application/x-unknown');
  10.  
  11. // pobranie pliku (plik znajduje się w tym samym katalogu co skrypt)
  12.  
  13. if ($fp = fopen($Plik_temp, 'rb'))
  14.    {
  15.        flock($fp, 1);
  16.        echo(fread($fp, filesize($Plik_temp)));
  17.        flock($fp, 3);
  18.        fclose($fp);
  19.    }
  20. ?>


Dzięki za podpowiedzi pozdrawiam
Go to the top of the page
+Quote Post
bregovic
post
Post #11





Grupa: Zarejestrowani
Postów: 562
Pomógł: 15
Dołączył: 8.08.2003
Skąd: Denmark/Odense

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


Możesz to jeszcze uprościć:
  1. <?php
  2. // Nazwa pliku
  3. $file = $_REQUEST['plik_tmp'];
  4.  
  5. // Nazwij plik na systemie docelowym
  6. header('Content-Disposition: attachment; filename="'.$file.'"');
  7.  
  8. // Lepiej jest mieć właściwy typ zawartośći...
  9. header('Content-Type: application/x-unknown');
  10.  
  11. // Sprawdzamy czy plik istnieje
  12. if (is_file($file)) {
  13.    
  14.    // Rozmiar pliku
  15.    header('Content-Length: '.filesize($file));
  16.    
  17.    // Zwróć zawartość pliku do przeglądarki
  18.    readfile($file);
  19. }
  20. ?>


--------------------
Prank - for the fun. Mac - for the simplicity. Deviantart - for the kick.
Life is ours, We live it our way -- Metallica
Go to the top of the page
+Quote Post
-gox-
post
Post #12





Goście







Zasadnicze pytanie, to czy mozesz utworzyc konto FTP bez prawa do usuwania plikow..
Bo jesli tak to nie ma sensu Dublowac sobie transferu.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 20.08.2025 - 09:23