Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Bezpieczny upload
Michu
post
Post #1





Grupa: Zarejestrowani
Postów: 108
Pomógł: 0
Dołączył: 15.10.2006
Skąd: zewsząd :P

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


Witam. Chcę skonstruować system umożliwiający użytkownikom upload swoich plików na serwer i porządkowanie ich w katalogach.

Cała struktura wyglądałaby następująco:

  1. # index.php
  2. # jakisplik.php
  3. # ijeszczeinny.php
  4. # users
  5.          * user123
  6.                    o img1.jpg
  7.                    o vid1.flv
  8.                    o file1.php
  9.                    o mojepliki
  10.                              @ doc1.txt
  11.                              @ doc2.txt
  12.          * user456
  13.                    o img2.jpg
  14.                    o vid2.flv

Każdy użytkownik ma do dyspozycji swój folder w folderze users.

Problemy jakie mi się nasuwają są następujące:
- W jaki sposób umożliwić wgląd do folderów dopiero po zalogowaniu np. poprzez index.php?
- W jaki sposób umożliwić użytkownikom odpalanie skryptów php nie mając obawy o to że dobiorą się do plików innych osób, nie mówiąc już o strukturze strony?
- Co jeszcze musiałbym zrobić aby taki system można byłoby uznać za bezpieczny?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 11)
pinochet
post
Post #2





Grupa: Zarejestrowani
Postów: 120
Pomógł: 12
Dołączył: 9.10.2008
Skąd: Tricity.Rumia()

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


1. Wystarczy uniemożliwić wyświetlanie katalogu "folder listing" może jednak lepiej było by pozwolić użytkownikom na zdecydowanie czy pozwalają na listing swoich folderów ... można to zrobić w htaccess lub globalnie w ustawieniach serwera www
2. Za to zazwyczaj odpowiada juz system operacyjny. Wiem że kiedyś były problemy z wieloma kontami na jednym serwerze - przykładowo apache działał na koncie które miało dostęp do plików innych userów co umożliwiało includowanie nie swoich plików (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
Po to powstało safe-mode w php ale jak jest teraz ( Apache 2) nie wiem do końca.
Go to the top of the page
+Quote Post
Michu
post
Post #3





Grupa: Zarejestrowani
Postów: 108
Pomógł: 0
Dołączył: 15.10.2006
Skąd: zewsząd :P

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


Po dłuższym namyśle zdecydowałem że odpalanie plików php w tych folderach nie będzie potrzebne. Usuwa się więc problem bezpiecznego wywoływania skryptów. Poradzę sobie z blokowaniem ich działania.

Pozostaje jednak problem ochrony treści folderów. Chodzi mi bardziej o rozwiązanie uniemożliwiające dostęp do plików poprzez url.

Przykład:
  1. *index.php
  2. * users
  3.          o user123
  4.                    @ doc1.txt
  5.                    @ doc2.txt
  6.          o user456
  7.                    @ doc3.txt
  8.                    @ doc4.txt

Po zalogowaniu w index.php jako np. user123 miałbym dostęp do plików z mojego folderu, ale pliki znajdujące się w folderze user456 nie byłyby już dostępne, nawet poprzez url. Jak takie coś zbudować?
Go to the top of the page
+Quote Post
Zmorcia
post
Post #4





Grupa: Zarejestrowani
Postów: 234
Pomógł: 5
Dołączył: 26.01.2008
Skąd: Lutcza

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


Wklej do folderu pusty plik index.html i git (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Michu
post
Post #5





Grupa: Zarejestrowani
Postów: 108
Pomógł: 0
Dołączył: 15.10.2006
Skąd: zewsząd :P

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


Nie chodzi o blokadę listingu plików, tylko o blokadę dostępu do nich. Jeśli znam url pliku, np. users/user456/doc1.txt to dostanę ten plik.

Pytanie brzmi: jak uniemożliwić dostęp do pliku poprzez url jeśli nie jest się zalogowanym? (bez htaccess proszę)
Go to the top of the page
+Quote Post
Marq
post
Post #6





Grupa: Zarejestrowani
Postów: 35
Pomógł: 5
Dołączył: 14.10.2008
Skąd: Tarnów

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


Może jakaś metoda show.php?file=foo/foo/bla.txt, oczywiście z całym filtrowaniem $_GET etc etc. W niej sprawdzasz czy użytwkonik jest zalogowany, i wyświetlasz bądź blokujesz?
Go to the top of the page
+Quote Post
Michu
post
Post #7





Grupa: Zarejestrowani
Postów: 108
Pomógł: 0
Dołączył: 15.10.2006
Skąd: zewsząd :P

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


Hmm... nawet dobre rozwiązanie, ale:

1. może być problem gdy plik będzie duży.
2. nie jestem pewien, ale chyba będzie to za sobą pociągało zmianę rozszerzenia, np: ściągam plik swf, a otrzymuję ściągnięty plik show.php. Oczywiście gdybym zmienił rozszerzenie show.php na show.swf wszystko byłoby ok, ale...

Bardziej jednak obawiałbym się wydajności takiego rozwiązania. Ale ok, jedno jest. Jeszcze jakieś?


EDIT:
Można by utworzyć łatwo dostępny folder typu mojadomena.pl/uploads, do którego plik byłby kopiowany gdy ktoś chce go ściagnąć. Po zakończeniu kopiowania zrobiłoby się redirect do tego pliku, omijamy problemy rozszerzenia. Znowu jednak kłania się wydajność.

Czy istnieje jakiś bezpośredni sposób wpływania na dostęp do plików, coś jak .htaccess tylko że zależne od sesji?

Ten post edytował Michu 16.10.2008, 19:33:40
Go to the top of the page
+Quote Post
Marq
post
Post #8





Grupa: Zarejestrowani
Postów: 35
Pomógł: 5
Dołączył: 14.10.2008
Skąd: Tarnów

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


Na wyświetlanej stronie możesz wstawić bezpośredni link do ściągnięcia (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
Michu
post
Post #9





Grupa: Zarejestrowani
Postów: 108
Pomógł: 0
Dołączył: 15.10.2006
Skąd: zewsząd :P

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


Marq, to odpada. Używanie bezpośrednich url'i oznaczałoby że każdy kto go zna może się dostać do pliku, a tego chcę uniknąć. Zobacz edit z mojego poprzedniego postu.
Go to the top of the page
+Quote Post
Marq
post
Post #10





Grupa: Zarejestrowani
Postów: 35
Pomógł: 5
Dołączył: 14.10.2008
Skąd: Tarnów

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


http://4programmers.net/PHP/Pobieranie_pli...nego_połączenia



Coś takiego?
Go to the top of the page
+Quote Post
Michu
post
Post #11





Grupa: Zarejestrowani
Postów: 108
Pomógł: 0
Dołączył: 15.10.2006
Skąd: zewsząd :P

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


Na stronie którą mi podałeś znalazłem odnośnik do tej:
http://elouai.com/force-download.php

Skrypt omija czytanie pliku przy uzyciu readfile(), ciekawe i praktyczne.
To chyba to, dzięki (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
marcio
post
Post #12





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

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


Hmm pisalem ostatnio przegladarke plikow w php i wiem jak to jest na twoim miejscu zrobilbym tak przy rejestracji tworzysz katalog user np rejestruje sie user marcio a katalog nazywasz dir_marcio123 i zapisujesz jego nazwe do bazy mysql, przy logowaniu katalog danego user'a ladujesz do cookie/sesji i sprawdzasz czy przegladany katalog jest rowny tej z sesji jesli nie to jakis blad czy cos oczywiscie musisz to tylko odpowiednie zabezpieczyc
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: 25.08.2025 - 03:54