Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Bezpieczeństwo uploadowanych plików
xwolf
post
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 29.03.2009

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


Witam,

Mam taki problem odnośnie bezpieczeństwa plików: Zalogowane osoby mogą uploadować pliki na mój serwer. Można ustawić opcję, że aby obejrzeć plik potrzebne jest podanie hasła. Przez określony czas do pliku ma dostęp tylko osoba, która wrzuciła ten plik na serwer. Po upływie tego czasu dostęp do pliku mają wszyscy użytkownicy sieci. Jeśli plik jest chroniony hasłem, trzeba podać to hasło żeby zobaczyć plik.

Jakie rozwiązanie tego problemu jest najlepsze ?

Narazie mam taki pomysł, że po wrzuceniu pliku na serwer zmieniam jego nazwę na losowy ciąg 32 znaków i umieszczam w katalogu dostępnym publicznie. Wydaje mi się, że dopóki ktoś nie zna nazwy pliku ( ciężko odgadnąć ten ciąg znaków ) nie będzie mógł go otworzyć. Oczywiście osoba, która wrzuciła ten plik na serwer, po zalogowaniu, ma udostępniony link do tego pliku. Po upływie określonego czasu każdemu wyświetla się link do tego pliku. No chyba, że plik jest zabezpieczony hasłem, wtedy najpierw trzeba podać to hasło.


--------------------
Profesjonalne tworzenie stron www. Sklepy internetowe, strony firmowe, portale internetowe.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 13)
okitoki
post
Post #2





Grupa: Zarejestrowani
Postów: 214
Pomógł: 18
Dołączył: 25.04.2009

Ostrzeżenie: (20%)
X----


hmmm, nie lepiej dać do katalogu do którego nie można wejść z sieci? nazwę i tak dobrze losować, by nikt nie nadpisał pliku, a dostęp do pliku bym zrobił przez php coś w stylu

Kod
if($jestdostep)
    readfile("/pliki/{$nazwazasobu}");
  else
    header("Location: /brakdostepu.php");


dobrze by było poleceniem header ustalić jeszcze nazwę pliku, jak jeszcze zakombinujesz obsługą mod_rewrite to nikt nie będzie wiedział ze za tym jeszcze stoi skrypt php

Ten post edytował okitoki 26.04.2009, 11:58:50


--------------------
Go to the top of the page
+Quote Post
Pilsener
post
Post #3





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


Cytat
Narazie mam taki pomysł, że po wrzuceniu pliku na serwer zmieniam jego nazwę na losowy ciąg 32 znaków i umieszczam w katalogu dostępnym publicznie
- kiepski pomysł, w dodatku skomplikowany. Nie ma sensu wynajdywać koła na nowo:

1. Tworzysz folder na te pliki i blokujesz do niego dostęp przez http (najprościej to zrobić chyba przy pomocy htaccess)
2. Wrzucasz pliki do tego folderu nazywając je 1,2,3 itd. aż do nieskończoności
3. Wszystko zapisujesz w bazie: id pliku, oryginalną nazwę pliku, nazwę nadaną przez użytkownika, typ, rozszerzenie, czas dodania, kto dodał itp.
4. Gdy ktoś chce plik pobrać, to sprawdzasz te wzystkie uprawnienia i jeśli jest ok, to pobierasz i wysyłasz do użytkownika razem z odpowiednim headerem, nazwą itp.
Go to the top of the page
+Quote Post
Quider
post
Post #4





Grupa: Zarejestrowani
Postów: 91
Pomógł: 9
Dołączył: 6.03.2009
Skąd: Katowice

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


Cytat(Pilsener @ 27.04.2009, 14:50:18 ) *
4. Gdy ktoś chce plik pobrać, to sprawdzasz te wzystkie uprawnienia i jeśli jest ok, to pobierasz i wysyłasz do użytkownika razem z odpowiednim headerem, nazwą itp.


Mam prośbę: mógłbyś zaimplementować? Mówię poważnie smile.gif Bo ja myślałem, że nie da się zmienić nazwy pliku w locie.


--------------------
www.quider.pl <- moja prywatna strona

Pomogłem? Kliknij Pomógł
Go to the top of the page
+Quote Post
pyro
post
Post #5





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


Cytat(Quider @ 27.04.2009, 14:58:41 ) *
Mam prośbę: mógłbyś zaimplementować? Mówię poważnie smile.gif Bo ja myślałem, że nie da się zmienić nazwy pliku w locie.


Czytałem tylko jeden czy dwa posty z tematu ale pewnie chodzi o to:

  1. <?php
  2. header('Content-type: image/png');
  3. // tutaj dajesz kolejne headery z wielkością pliku, nazwą itd.
  4. readfile('obrazki/obrazek.png');
  5. ?>


--------------------
ET LINGUA EIUS LOQUETUR IUDICIUM
Go to the top of the page
+Quote Post
Quider
post
Post #6





Grupa: Zarejestrowani
Postów: 91
Pomógł: 9
Dołączył: 6.03.2009
Skąd: Katowice

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


Tak tak, to rozumiem, chodzi mi o to, że na przykład zapisuje plik w folderze pod nazwa zahaszowaną w md5, ale chce go przesłać pod nazwą np. z bazy danych.

Ten post edytował Quider 27.04.2009, 14:20:01


--------------------
www.quider.pl <- moja prywatna strona

Pomogłem? Kliknij Pomógł
Go to the top of the page
+Quote Post
pyro
post
Post #7





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


Cytat(Quider @ 27.04.2009, 15:19:35 ) *
Tak tak, to rozumiem, chodzi mi o to, że na przykład zapisuje plik w folderze pod nazwa zahaszowaną w md5, ale chce go przesłać pod nazwą np. z bazy danych.


pobierasz nazwę z bazy danych, hashujesz md5 i patrzysz czy są pasujące pliki do tego hasha...


--------------------
ET LINGUA EIUS LOQUETUR IUDICIUM
Go to the top of the page
+Quote Post
Quider
post
Post #8





Grupa: Zarejestrowani
Postów: 91
Pomógł: 9
Dołączył: 6.03.2009
Skąd: Katowice

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


ale jak to przesłać w nagłówkach?


--------------------
www.quider.pl <- moja prywatna strona

Pomogłem? Kliknij Pomógł
Go to the top of the page
+Quote Post
marcio
post
Post #9





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Chodzi ci o:
  1. <?php
  2. header('Content-Disposition: attachment; filename=' . $nazwa_pliku);
  3. ?>

questionmark.gif


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
Pilsener
post
Post #10





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


I pamiętaj, że różne przeglądarki mogą wymagać różnych nagłówków oraz by pliczor nie wysyłać do przeglądarki w całości, lecz porcjami lub nawet po jednej linijce. Poszukaj na forum, download plików był omawiany wielokrotnie, ja np. realizuję to takim kodem:

  1. <?php
  2. header("Content-Type: $mime");
  3.   header("Expires: ".gmdate('D, d M Y H:i:s')." GMT");
  4.   header("Content-Disposition: attachment; filename = $nazwa");      //Dla IE:
  5.   header("Cache-Control: must-revalidate, post-check = 0, pre-check = 0");
  6.   header("Pragma: public");
  7.   header("Content-Disposition: attachment; filename = $nazwa");      // Dla reszty:
  8.   header("Pragma: no-cache");
  9.   header("Content-Length:".$wielkosc);
  10.   $file = fopen($czyi, "r");
  11.   while(!feof($file)){
  12.      print fread($file,$down_rate);
  13.   }
  14.   fclose($file);
  15. ?>
- $down_rate to wielkość porcji, warto też wstawić nazwę, typ mime oraz rozmiar pliku. W ten sposób po prostu wysyłasz dowolny zlepek bajtów jako cokolwiek pod dowolną nazwą. To w interesie usera jest, by nie pobierać i otwierać co popadnie.
Go to the top of the page
+Quote Post
Quider
post
Post #11





Grupa: Zarejestrowani
Postów: 91
Pomógł: 9
Dołączył: 6.03.2009
Skąd: Katowice

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


No ja mam taki sam skrypt. Jak ten ostatni (niemalże identyczny) Problem jednak w tym, że jeżeli na serwerze mam plik o nazwie (dowolony ciag znakow).exe a chce go wysłać do pobrania jako program.exe.


--------------------
www.quider.pl <- moja prywatna strona

Pomogłem? Kliknij Pomógł
Go to the top of the page
+Quote Post
gulldarek
post
Post #12





Grupa: Zarejestrowani
Postów: 156
Pomógł: 15
Dołączył: 13.09.2003
Skąd: London

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


$nazwa moze zawierac cokolwiek, np. program.exe

Ten post edytował gulldarek 29.04.2009, 22:25:49
Go to the top of the page
+Quote Post
Quider
post
Post #13





Grupa: Zarejestrowani
Postów: 91
Pomógł: 9
Dołączył: 6.03.2009
Skąd: Katowice

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


aha, czyli za to jaki plik pobrac z serwera odpoiwada funkcja do "odczytywania" pliku, jesli dobrze rozumiem. Ok, szkoda, że to nie ja jestem założycielem tematu bo należy cie się "pomogł" tongue.gif

EDIT
@down

Wielkie dzieki smile.gif

Ten post edytował Quider 29.04.2009, 22:52:52


--------------------
www.quider.pl <- moja prywatna strona

Pomogłem? Kliknij Pomógł
Go to the top of the page
+Quote Post
gulldarek
post
Post #14





Grupa: Zarejestrowani
Postów: 156
Pomógł: 15
Dołączył: 13.09.2003
Skąd: London

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


Dziala to nastepujaco:

Wysylasz do przegladarki naglowek Content-Disposition w ktorym definiujesz nazwe pliku pod jaka maja sie sciagnac dane (np. program.exe)

Nastepnie wysylasz zawartosc pliku, ktory ma sie sciagnac, np. (dowolny ciag znakow).exe

Czyli uzywajac kodu Pilsener bedzie to mniej wiecej tak:

  1. <?php
  2.  
  3. $czyi = "(dowolny ciag znakow).exe";
  4. $nazwa = "program.exe";
  5. $wielkosc = filesize($czyi);
  6.  
  7. header("Content-Type: $mime");
  8.  header("Expires: ".gmdate('D, d M Y H:i:s')." GMT");
  9.  header("Content-Disposition: attachment; filename = $nazwa");      //Dla IE:
  10.  header("Cache-Control: must-revalidate, post-check = 0, pre-check = 0");
  11.  header("Pragma: public");
  12.  header("Content-Disposition: attachment; filename = $nazwa");      // Dla reszty:
  13.  header("Pragma: no-cache");
  14.  header("Content-Length:".$wielkosc);
  15.  $file = fopen($czyi, "r");
  16.  while(!feof($file)){
  17.     print fread($file,$down_rate);
  18.  }
  19.  fclose($file);
  20. ?>
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: 22.08.2025 - 11:27