[php] download plików zabezpieczenie

0

witam

na mojej stronie pliki mogą pobierać tylko osoby zalogowane poprzez link
http://domena.pl/index.php?download=id

kolega twierdzi, że może podglądnąć z jakiego dokładnie katalogu jest pobierany plik i potem to robić bez zalogowania

ale nie chce się pochwalić jak.. jak pobieram to pokazuje z jakiej domeny pobiera a nie z jakiego podfolderu
nie mam folderu download ;]

jest jakiś program który pokazuje właściwą ścieżkę do pliku??

0

Można jakieś błędy wywołać i doświadczalnie ustalić gdzie ten katalog jest, sporo sposobów. Najbardziej uniwersalny patch na to, to po prostu wkleić plik o nazwie:.htaccessz treściądeny from alldo katalogu gdzie trzymasz pliki. Wtedy kiedy nawet ktoś się dowie jak nazywa się katalog, nic z tego nie zrobi, bo Apache odmówi udostępnienia jakichkolwiek plików z tego katalogu, łącznie z subfolderami i plikami w subfolderach. Jednocześnie to rozwiązanie jest dobre, bo PHP czyta pliki z dysku, nie za pośrednictwem Apache, więc skrypt nie będzie blokowany.

Jeśli masz problem ze stworzeniem pliku o nazwie .htaccess (z kropką na początku) to najlepiej wysłać jakąś tekstówkę na serwer i bezpośrednio na serwerze zmienić nazwę przez klienta FTP.

0

mediatech, podałbyś konkretnego linka to by się sprawdziło czy się da.
Jeżeli pliku nie podajesz przez skrypt tylko robisz przekierowanie - będzie dało się odczytać ścieżkę, choć większość przeglądarek to ukryje.
Przy okazji - 90% ludzi przy robieniu tego typu skryptu używa readfile, bądź file_get_contents, mam nadzieję, że zdajesz sobie sprawę, że takie rozwiązanie przy większych plikach i paru ludzi ściągających ten plik zarżnie serwer?

0

no ustawiłem tak jak mówiono .htaccess i ok nie da radę, dzięki

readfile, bądź file_get_contents

no tak robię, ale jak inaczej? headerem? ale jak wtedy to zabezpieczyć, żeby tylko wybrani userzy z odpowiednimi uprawnieniami mogli to pobierać

0

ok nie da radę, dzięki

w sensie, że nie da rady podglądnąć folderu i pobrać z niego plików
działa tylko przez skrypt

0

readfile, file_get_contents oraz podobne ładują cały plik naraz - i dopóki nie zakończysz sciągania - siedzi on w RAM.
Teraz wyobraź sobie serwer z 1GB RAMu i 10 osobami chcącymi ściągnać 20MB plik - ~200MB znika na samym downloadzie. A sam serwis Apache, mnóstwo innych rzeczy? Co jeżeli plik będzie większy? Dodatkowo - gdy jesteś na współdzielonym hostingu (czyli zwykły hosting www) - bardzo szybko zauważą taką rzecz i Ci konto zablokują.
Rozwiązanie:
fopen,
i potem w petli while(!foef($plik)) robisz fread z powiedzmy dlugoscia 64KB, echo.

A nagłówki i tak jakieś wysyłasz przeciez ;p

0
dzek69 napisał(a)

readfile, file_get_contents oraz podobne ładują cały plik naraz - i dopóki nie zakończysz sciągania - siedzi on w RAM.

Skąd taka informacja? Jakieś testy robiłeś?

0

wiem, że nie do końca tak jest, że cały plik siedzi w ramie - trochę to uprościłem, ale sprawdź sobie w domu - użycie pamięci gwałtownie wzrasta o duże ilości przy takim "downloadzie".
a testy robiłem (jak zaczynalem z php, i nie bylem swiadomy tego co robie, hosting shared) - mówili ze wywaliło im apacha :P

w każdym razie - użycie takiego "buforowania" raczej służy serwerowi, prawda?

0

Czytanie po kawałkach oczywiście, zaraz zapuszczę jakiś test na te funkcje.

Edit: Po stworzeniu obrazka zawierającego losowe szumy wielkości 95MB czytałem go readfile dla serwera w Niemczech. W trakcie pobierania użycie pamięci na jakiś czas skoczyło minimalnie o kilkaset kilobajtów, więc albo to już naprawili, albo miałeś naprawdę dziwną konfigurację apache na tym shared hoście.

0

"na prawdę" (hehe, wybacz) nie wiem, bo nie ja konfigurowałem. Po prostu wolę tego unikać od kiedy się przejechałem i skorzystać z bardziej przemyślanych metod.

1 użytkowników online, w tym zalogowanych: 0, gości: 1