Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Ftp , bezpieczny download
slepy
post
Post #1





Grupa: Zarejestrowani
Postów: 70
Pomógł: 0
Dołączył: 27.02.2003

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


(IMG:http://forum.php.pl/style_emoticons/default/aarambo.gif) Siema all (IMG:http://forum.php.pl/style_emoticons/default/aarambo.gif)
Mam server ftp, chcialbym tam wzucic kilka gier itp.
Pierwszym moim ruszem bylo zrobienie okna ktore sie "ukrywa" poprzez meta wlacza sciaganie i po 10 sec samo sie wylacza.. Ale nie zawsze to sciaganie sie zdazylo wlaczyc a juz www sie zamykalo, dlatego pomyslalem ze zrobie to w php..
Oto torche zrodla:
  1. <?php
  2. $ftp_server=&#092;"ip\";
  3. $ftp_user_name=&#092;"login\";
  4. $ftp_user_pass=&#092;"haslo\";
  5.  
  6. $conn_id = ftp_connect($ftp_server); 
  7. $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass); 
  8. if ((!$conn_id) || (!$login_result)) { 
  9.  echo &#092;"Połączenie FTP się nie powiodło!\";
  10. die; 
  11.  } else {
  12.  echo &#092;"Połączony z serverem\";
  13.  }
  14. ?>

I co teraz musze zrobic zeby pobieranie pliku wlaczylo sie u uzytkownika? jest w ogole taka mozliwosc ? bo ftp_get pobiera mi plik na server z www ;/
Z gory THx za pomoc;)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 11)
Ludvik
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 698
Pomógł: 3
Dołączył: 28.03.2004
Skąd: Wrocław

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


php działa po stronie serwera, a nie klienta. Ostatecznie możesz przekierować klienta przy pomocy nagłówków, ale jeżeli chcesz ich użyć, to raczej nie napiszesz użytkownikowi, czy się dostał czy nie. Nagłówki muszą zostać wysłane przed jakimkolwiek innym wyjściem.

Kod z manuala.
  1. <?php
  2. header(&#092;"Location: http://www.example.com/\"); /* Przekieruj przeglądarkę */
  3. exit;  /* Upewnij się, że kod poniżej nie zostanie wykonany 
  4.  po przekierowaniu. */
  5. ?>


Funkcje ftp_ służą, do połączenia serwera, na którym stoi php z obiektem docelowym, który podajesz jako argument. W twoim przypadku nie zadziałają tak jak zamierzałeś.

Ten post edytował Ludvik 18.06.2004, 16:31:15
Go to the top of the page
+Quote Post
slepy
post
Post #3





Grupa: Zarejestrowani
Postów: 70
Pomógł: 0
Dołączył: 27.02.2003

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


No to w jaki sposob mozna zrobic bezpieczny download?
bo Header przepieruje awiec otworzy w moim przypadku: ftp://login:pass@ip/plik
i wszystko widac w naglowku... a mi chodzi o zabezpieczenie, zeby sciaganie pliku sie wlaczylo, ale zeby nikt nie wiedzial zkad...
Go to the top of the page
+Quote Post
Ludvik
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 698
Pomógł: 3
Dołączył: 28.03.2004
Skąd: Wrocław

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


Nie zrobisz tego tak prosto, bo kiedy klient ma ściągać przez przeglądarke, to musi dostać komplet danych, w tym linka, login i hasło. Tutaj jest największy problem. Nie wiem jak by to miało wyglądać, ale jeżeli ftp i http są na osobnych maszynach, to chyba ciężko będzie. Może, ktoś z większym doświadczeniem się wypowie?
Go to the top of the page
+Quote Post
squid
post
Post #5





Grupa: Zarejestrowani
Postów: 358
Pomógł: 0
Dołączył: 3.07.2003
Skąd: Szczecin->niebuszewo->*(next to window)

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


i co w koncu jak rzwiazales problem? bo przydazyl mi sie podobny
Go to the top of the page
+Quote Post
Vengeance
post
Post #6





Grupa: Zarejestrowani
Postów: 657
Pomógł: 2
Dołączył: 15.08.2003
Skąd: Łódź

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


dac odpowiedni header() {spis mime-type macie przyklejony na subforum 'php'} polaczyc sie z ftp serwerem pobrac jakos ten plik do zawartosci jednej zmiennej a nastepnie wyslac go userowi przez zwykle echo.

cos analiogicznego do tworzenia obrazkow w php.
Go to the top of the page
+Quote Post
slepy
post
Post #7





Grupa: Zarejestrowani
Postów: 70
Pomógł: 0
Dołączył: 27.02.2003

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


A ja bym to zrobił tak...
  1. <?php
  2. $link=&#092;"ftp://login:pass@ip/sciezka/plik.exe\";
  3. header(&#092;"Content-Type: application/force-download\");
  4. header(&#092;"Content-Type: application/octet-stream\");
  5. header(&#092;"Content-Type: application/download\");
  6. header(&#092;"Content-Disposition: attachment; filename=\".basename($link).\";\");
  7. header(&#092;"Accept-Ranges: bytes\");
  8. header(&#092;"Content-Transfer-Encoding: binary\");
  9. header(&#092;"Content=Lenght: \".filesize($link));
  10. readfile($link);
  11. exit();
  12.  
  13. ?>
  14. <html>
  15.  
  16. <head>
  17. <meta http-equiv=Content-Type content=text/html; charset=windows-1250>
  18. <title>DZIEKI ZA SCIAGNIECIE </title>
  19. <meta name=GENERATOR content=Microsoft FrontPage 3.0>
  20. </head>
  21. <body>
  22. <p>DZIEKI ZA SCIAGNIECIE !!</p>
  23. </body>
  24. </html>


Powinno działać.. już tego dokładnie nie pamiętam.
Wystarczy to ulepszyć i będzie ok (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Pozdrawiam
Go to the top of the page
+Quote Post
squid
post
Post #8





Grupa: Zarejestrowani
Postów: 358
Pomógł: 0
Dołączył: 3.07.2003
Skąd: Szczecin->niebuszewo->*(next to window)

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


Cytat(slepy @ 2004-12-01 14:41:56)
A ja bym to zrobił tak...
  1. <?php
  2. $link=&#092;"ftp://login:pass@ip/sciezka/plik.exe\";
  3. header(&#092;"Content-Type: application/force-download\");
  4. header(&#092;"Content-Type: application/octet-stream\");
  5. header(&#092;"Content-Type: application/download\");
  6. header(&#092;"Content-Disposition: attachment; filename=\".basename($link).\";\");
  7. header(&#092;"Accept-Ranges: bytes\");
  8. header(&#092;"Content-Transfer-Encoding: binary\");
  9. header(&#092;"Content=Lenght: \".filesize($link));
  10. readfile($link);
  11. exit();
  12.  
  13. ?>
  14. <html>
  15.  
  16. <head>
  17. <meta http-equiv=Content-Type content=text/html; charset=windows-1250>
  18. <title>DZIEKI ZA SCIAGNIECIE </title>
  19. <meta name=GENERATOR content=Microsoft FrontPage 3.0>
  20. </head>
  21. <body>
  22. <p>DZIEKI ZA SCIAGNIECIE !!</p>
  23. </body>
  24. </html>


Powinno działać.. już tego dokładnie nie pamiętam.
Wystarczy to ulepszyć i będzie ok (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Pozdrawiam

i user widzi twoje haslo

troche mija sie to z celem
Go to the top of the page
+Quote Post
rogrog
post
Post #9





Grupa: Zarejestrowani
Postów: 602
Pomógł: 1
Dołączył: 3.04.2004
Skąd: Trójmiasto (Gdańsk)

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


Cytat(squid @ 2004-12-01 18:28:11)
i user widzi twoje haslo

troche mija sie to z celem

User nie zobaczy hasła, jedynie nazwę pliku który udostępnia to ściąganie.

ja bym zrobił mniej więcej tak jak slepy tylko bez (chyba) niepotrzebnych dodatków i tego html (wygenerowany we frontpage, błeee...), który i tak się nie wyświetli bo jest po exit()


Wpisujesz pliki jakie masz do tablicy $pliki, po czym jeśli chcesz udostępnić jakiś plik dajesz link w postaci download.php?plik=plik1

  1. <?php
  2.  
  3.  
  4. //lista dopuszczalnych wartości
  5. $pliki = Array();
  6. $pliki['plik1'] = 'plik1.rar';
  7. $pliki['drugi_plik'] = 'plik1.zip';
  8. $pliki['pliknumertrzy'] = 'plik3.tar.gz';
  9.  
  10. //stworzenie ścieżki do pliku
  11. $dir = 'ftp://login:pass@ip/sciezka/';
  12. $filename = ( isset( $pliki[$_GET['plik']] ) ) ? $pliki[$_GET['plik']] : '';
  13. $pathfile = $dir.'/'.$filename;
  14.  
  15. //jeśli znaleziono taki plik w tablicy
  16. if ( $filename )
  17. {
  18. //wysłanie nagłówków zmuszających przeglądarkę do uruchomienia pobierania
  19. header('Content-Type: application/octet-stream');
  20. header('Content-Disposition: attachment; filename='.$filename);
  21. header('Content-Type: application/force-download');
  22. //odczytanie pliku z serwera FTP i wysłanie do przeglądarki
  23. readfile($pathfile);
  24. }
  25.  
  26. ?>


Ten post edytował rogrog 1.12.2004, 18:51:49
Go to the top of the page
+Quote Post
gdaq
post
Post #10





Grupa: Zarejestrowani
Postów: 62
Pomógł: 0
Dołączył: 25.12.2003
Skąd: Warszawa

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


Odgrzebuje temat bo przejrzalem 27 stron postow na forum i nie znalazlem odpowiedzi na swoj problem, a mysle ze temat jest wart rozwiazania bo jak widac nie jestem jedynym ktory nie moze sobie z tym poradzic:) Dobra do rzeczy.
Powyzsze skrypty sa jak najbardziej wporzadku ale moga sluzyc tylko i wylacznie do download'u poprzez http. Po wpisaniu protokolu "ftp://" w adresie URL pliku funkcje readfile,file_put_contents etc. spowoduja tylko wyslanie pliku przez protokol ftp do server'a http a uzytkownik otrzyma go przez http.

Znalazlem rozwiazanie w postaci header("Location") ale wowczas klient dostaje pelen paiet danych czyli login, haslo,host oraz katalog w ktorym znajduje sie plik. Jesli ograniczyc by sie tylko do IE poniekad problem rozwiazany bo ta przegladarka nie pokazuje owych danych jesli wywolamy download w powyzszy sposob, ale jest zenujacym poprostu:) ograniczac sie do najgorszego produktu na rynku;)

Kolejny pomysl jaki przyszedl mi do glowy to stworzyc tymczasowy katalog na serverze ftp do ktorego bedziemy przegywac pliki z ktalogu macierzystego zgodnie z rzadaniem uzytkownikow zakodowane powiedzmy uzywajac md5 a po sciagnieciu usuwac.

Ostatnie rozwiazanie pewnie najlepsze ale i najtrudniejsze:) Napisac program w C ktory wywolany z php'a wysle plik uzytkownikowi i tutaj czekam na propozycje:)

Co o tym myslicie? Moze ktos cos takiego juz robil wie jaksie do tego zabrac badz poda chociarz jakis link? Jakich bibliotek i funkcji uzywac jesli zdecydowalbym sie na napisanie czegos w C?

Gdaq
Go to the top of the page
+Quote Post
squid
post
Post #11





Grupa: Zarejestrowani
Postów: 358
Pomógł: 0
Dołączył: 3.07.2003
Skąd: Szczecin->niebuszewo->*(next to window)

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


Cytat(gdaq @ 2005-02-16 23:53:04)
Odgrzebuje temat bo przejrzalem 27 stron postow na forum i nie znalazlem odpowiedzi na swoj problem, a mysle ze temat jest wart rozwiazania bo jak widac nie jestem jedynym ktory nie moze sobie z tym poradzic:) Dobra do rzeczy.
Powyzsze skrypty sa jak najbardziej wporzadku ale moga sluzyc tylko i wylacznie do download'u poprzez http. Po wpisaniu protokolu "ftp://" w adresie URL pliku funkcje readfile,file_put_contents etc. spowoduja tylko wyslanie pliku przez protokol ftp do server'a http a uzytkownik otrzyma go przez http.

Znalazlem rozwiazanie w postaci header("Location") ale wowczas klient dostaje pelen paiet danych czyli login, haslo,host oraz katalog w ktorym znajduje sie plik. Jesli ograniczyc by sie tylko do IE poniekad problem rozwiazany bo ta przegladarka nie pokazuje owych danych jesli wywolamy download w powyzszy sposob, ale jest zenujacym poprostu:) ograniczac sie do najgorszego produktu na rynku;)

Kolejny pomysl jaki przyszedl mi do glowy to stworzyc tymczasowy katalog na serverze ftp do ktorego bedziemy przegywac pliki z ktalogu macierzystego zgodnie z rzadaniem uzytkownikow zakodowane powiedzmy uzywajac md5 a po sciagnieciu usuwac.

Ostatnie rozwiazanie pewnie najlepsze ale i najtrudniejsze:) Napisac program w C ktory wywolany z php'a wysle plik uzytkownikowi i tutaj czekam na propozycje:)

Co o tym myslicie? Moze ktos cos takiego juz robil wie jaksie do tego zabrac badz poda chociarz jakis link? Jakich bibliotek i funkcji uzywac jesli zdecydowalbym sie na napisanie czegos w C?

Gdaq

do kopiowania pliku nie potrzebujesz C, mozesz uzyc php i przekopiowac plik z katalogu ukrytego do publicznego ftp i podac pprostu userowi linka, jak go kliknie to sam menadzer downloadu mu sie uruchomi.
Nie rozumiem do czego chcesz uzyc md5 ale chyba niezgodnie z przeznaczeniem bo md5 nie jest f-cja kodujaca ale jednokierunkowa f-cja skrutu ktora z dowolnej tresci/pliku tworzy w maire unikalny ciag 128 bitow ale dla tej samej wiadomosci zawsze ten sam co jest uzywane do testow integralnosci.

mozesz sprobowac dodawac nowe hasla dostepu do ftp ktore daja dostep tylko do okreslonego katalogu
(IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
gdaq
post
Post #12





Grupa: Zarejestrowani
Postów: 62
Pomógł: 0
Dołączył: 25.12.2003
Skąd: Warszawa

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


C zamierzalem uzyc do jakby wlasnego server'a ftp ktory bedzie laczyc sie na wezwanie php'a z prawdziwym ftp'em. Podawal link do pliku ale defakto sciagal go przez mojego ftp'a ktoy dzialalby na jakims innym porcie i maskowal adres ftp w ten sposob.

MD5
zapisuje login do tablicy charow mieszam wszystkie znaki przypadkowo i generuje z tego md5 dostaje unikatowa nazwe. Tworze katalog w katalogu tmp o tej wlasnei nazwie. Wykluczam wlasciwie prawodpodobienstwo przypadkowego odnalezienia katalgou przez uzytkownika choc watpie zeby ktos chcial probowac jak zobaczy nazwe ftp://download/#@krzaczki@#/file.exe katalogowi download nadajemy chmod 771 a #@krzaczki@# chmod 775 co daje nam brak mozliwosci przegladania katalogow znajdujach sie w ktalagou download

Dodawanie kont do ftp'a jest chyba troszke malo wydajne i niebezpieczen bo w pewnym momencie bedziemy mieli np. 10 tys. kont na ftpie z czego uzywanych bedzie tylko 1 tys.

Nie chce mi sie wierzyc ze to jest takie skaplikowane do wykonania nie da sie tego jakims porostym sposobem rozwiazac.

Powracajajc jeszcze do funckji readfile etc. mam taki skrypcik:

  1. <?php
  2. header(&#092;"Pragma: public\");
  3. header(&#092;"Expires: 0\");
  4. header(&#092;"Cache-Control: must-revalidate, post-check=0, pre-check=0\");
  5. header(&#092;"Cache-Control: public\"); 
  6. header(&#092;"Content-Description: File Transfer\");
  7. header('Content-Type: application/octet-stream');
  8. header('Content-Disposition: attachment; filename='.$filename);
  9. header('Content-Type: application/force-download');
  10. header(&#092;"Content-Transfer-Encoding: binary\");
  11. header(&#092;"Content-Length: \".filesize($filename));
  12. readfile($pathfile);
  13.  
  14. ?>


Tylko ze sciaga wtedy np 255 bajtow np. z 8 MB. Czyli laczy sie z serwerem po przejrzeniu logow wnioskuje ze wynika to z tego iz jesli wywolam readfile lacze sie z serwerem przy uzyciu active mode a nie pasive moze o to chodzi. Ponizej zapis logow z servwera dla udanego download'u przy uzyciu header("Location") i nie udanego przy uzyciu readfile()

Kod
2005-02-16 09:27:06#majkel#00:00:13#8887179#0#8887179#1#0#634798,500#8#0
(000007) 2005-02-16 09:27:06 - (not logged in) (192.168.0.218) > connected to ip : 192.168.0.228
(000007) 2005-02-16 09:27:06 - (not logged in) (192.168.0.218) > sending welcome message.
(000007) 2005-02-16 09:27:06 - (not logged in) (192.168.0.218) > 220 BulletProof FTP Server ready ...
(000007) 2005-02-16 09:27:06 - (not logged in) (192.168.0.218) > USER anonymous
(000007) 2005-02-16 09:27:06 - (not logged in) (192.168.0.218) > 331 Password required for anonymous.
(000007) 2005-02-16 09:27:06 - (not logged in) (192.168.0.218) > PASS ********
(000007) 2005-02-16 09:27:06 - majkel (192.168.0.218) > logged in.
(000007) 2005-02-16 09:27:06 - majkel (192.168.0.218) > 230 User majkel logged in.
(000007) 2005-02-16 09:27:06 - majkel (192.168.0.218) > TYPE I
(000007) 2005-02-16 09:27:06 - majkel (192.168.0.218) > 200 Type set to I.
(000007) 2005-02-16 09:27:06 - majkel (192.168.0.218) > PASV
(000007) 2005-02-16 09:27:06 - majkel (192.168.0.218) > 227 Entering Passive Mode (192,168,0,228,102,45).
(000007) 2005-02-16 09:27:06 - majkel (192.168.0.218) > SIZE /pcmark2002.exe
(000007) 2005-02-16 09:27:06 - majkel (192.168.0.218) > 213 8887179
(000007) 2005-02-16 09:27:06 - majkel (192.168.0.218) > RETR /pcmark2002.exe
(000007) 2005-02-16 09:27:06 - majkel (192.168.0.218) > asked to download 'C:\apache\htdocs\pcmark2002.exe' --> Access allowed.
(000007) 2005-02-16 09:27:06 - majkel (192.168.0.218) > 150 Data connection accepted from 192.168.0.218:1186; transfer starting for pcmark2002.exe (8887179 bytes).
(000007) 2005-02-16 09:27:06 - majkel (192.168.0.218) > started downloading 'C:\apache\htdocs\pcmark2002.exe'.
(000007) 2005-02-16 09:27:13 - majkel (192.168.0.218) > finished downloading 'C:\apache\htdocs\pcmark2002.exe' -  (00:00:08 - 8678,886 KB - 1084,861 KBytes/s)
(000007) 2005-02-16 09:27:13 - majkel (192.168.0.218) > 226 Transfer ok
(000007) 2005-02-16 09:27:19 - majkel (192.168.0.218) > disconnected. (00:00:13)

2005-02-17 14:03:08#majkel#00:00:00#0#0#0#0#0#0,000#0#0
(000006) 2005-02-17 14:03:08 - (not logged in) (192.168.0.228) > connected to ip : 192.168.0.228
(000006) 2005-02-17 14:03:08 - (not logged in) (192.168.0.228) > sending welcome message.
(000006) 2005-02-17 14:03:08 - (not logged in) (192.168.0.228) > 220 BulletProof FTP Server ready ...
(000006) 2005-02-17 14:03:08 - (not logged in) (192.168.0.228) > USER anonymous
(000006) 2005-02-17 14:03:08 - (not logged in) (192.168.0.228) > 331 Password required for anonymous.
(000006) 2005-02-17 14:03:08 - (not logged in) (192.168.0.228) > PASS ********
(000006) 2005-02-17 14:03:08 - majkel (192.168.0.228) > logged in.
(000006) 2005-02-17 14:03:08 - majkel (192.168.0.228) > 230 User majkel logged in.
(000006) 2005-02-17 14:03:08 - majkel (192.168.0.228) > TYPE I
(000006) 2005-02-17 14:03:08 - majkel (192.168.0.228) > 200 Type set to I.
(000006) 2005-02-17 14:03:08 - majkel (192.168.0.228) > SIZE /ftp/pcmark2002.exe
(000006) 2005-02-17 14:03:08 - majkel (192.168.0.228) > 550 No such file or directory.
(000006) 2005-02-17 14:03:08 - majkel (192.168.0.228) > disconnected. (00:00:00)

Nie wiem wsumie co jest zapisywane na dysku bo z tego co powyzej wynika ze nic nie zostalo sciagniety w drugim przypadku z server'a
Czekam na jakies sugestie i propozycje:)

Gdaq

Ten post edytował gdaq 17.02.2005, 14:18:11
Go to the top of the page
+Quote Post

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: 18.09.2025 - 21:00