![]() |
![]() |
![]()
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:
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? |
|
|
![]() |
![]()
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. |
|
|
![]()
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:
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ć? |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 234 Pomógł: 5 Dołączył: 26.01.2008 Skąd: Lutcza Ostrzeżenie: (20%) ![]() ![]() |
Wklej do folderu pusty plik index.html i git (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
|
|
|
![]()
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ę) |
|
|
![]()
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?
|
|
|
![]()
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 |
|
|
![]()
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)
|
|
|
![]()
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.
|
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 35 Pomógł: 5 Dołączył: 14.10.2008 Skąd: Tarnów Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
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) |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%) ![]() ![]() |
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
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 25.08.2025 - 03:54 |