Krzysztof Eugeniusz Kotkowicz

Krzysztof Eugeniusz Kotkowicz Freelancer,
Administrator
systemów
teleinformatycznych

Temat: Zabezpieczenie plików statycznych na serwerze.

Mam dość nietypowy problem. Chcę zabezpieczyć, przed niepowołanym dostępem katalog z plikami statycznymi, które znajdują się na serwerze. Dostęp do powyższych plików miałby zostać ograniczony do użytkowników zalogowanych w aplikacji. Aktualne rozwiązanie (mod_rewrite kierujący do pliku autoryzuj.php, który to plik sprawdza czy użytkownik jest zalogowany i dostarcza plik przy użyciu readfile() ) nie do końca się sprawdza, jeśli chodzi o wydajność.

Optymalne by było, gdyby apache mógł sprawdzić istnienie sesji w bazie danych i na tej podstawie ocenić, czy dany plik może zostać pobrany. Jakieś pomysły?

konto usunięte

Temat: Zabezpieczenie plików statycznych na serwerze.

Być może chodzi o coś takiego: http://redmine.lighttpd.net/wiki/1/Docs:ModSecDownload

P.S. Do nginx'a też jest podobny moduł: http://wiki.nginx.org/HttpSecureDownloadŁukasz M. edytował(a) ten post dnia 07.12.11 o godzinie 23:08
Maciej Ż.

Maciej Ż. człowiek orkiestra

Temat: Zabezpieczenie plików statycznych na serwerze.

trafiłem na coś takiego do apache-a mod_xsendfile.

to co Łukasz podesłał do nginx wygląda też ok chodź nie wykorzystuje sesji. przechodząc na nginx-a uzyskasz ogólnie większą wydajność przy serwowaniu treści statycznych.

odpytywanie bazy trwa długo. informacje o sesjach wypadało by cache-ować w memcache np.

kilka inncyh pomysłów:

- włacz akcelerator APC np.
- grzebnij przy buforowaniu fread - > fwrite
- ewentualnie skompiluj autoryzuj.php i odpalaj jako cgi
- napisz regułę do modsecurity która egzaminuje sesje
Krzysztof Eugeniusz Kotkowicz

Krzysztof Eugeniusz Kotkowicz Freelancer,
Administrator
systemów
teleinformatycznych

Temat: Zabezpieczenie plików statycznych na serwerze.

Maciej Żarczyński:
trafiłem na coś takiego do apache-a mod_xsendfile.

Myślę, że to będzie najlepsze rozwiązanie - powinno załatwić wszystkie problemy. :-)

kilka inncyh pomysłów:
- włacz akcelerator APC np.

Działa - przy kilku tysiącach dużych plików nic nie zmieni.
- grzebnij przy buforowaniu fread - > fwrite

To już jakaś opcja, natomiast tez wiele nie da - skrypt musiał te 20MB .pdf załadować najpierw do pamięci z dysku, jeśli korzystał z readfile() - skuteczniejsze było:

http://teddy.fr/blog/how-serve-big-files-through-php

Natomiast nie rozwiązywało podstawowego problemu - by plik nie przechodził w całości przez zewnętrzny skrypt, tylko mimo wszystko był serwowany apachem.
Michał Prokopiuk

Michał Prokopiuk Internet pod
strzechy :)

Temat: Zabezpieczenie plików statycznych na serwerze.

squid + redirector + autoryzacja? do wysyłania dużych statycznych plików nadaje się idealnie.
Krzysztof Eugeniusz Kotkowicz

Krzysztof Eugeniusz Kotkowicz Freelancer,
Administrator
systemów
teleinformatycznych

Temat: Zabezpieczenie plików statycznych na serwerze.

Michał Prokopiuk:
squid + redirector + autoryzacja? do wysyłania dużych statycznych plików nadaje się idealnie.

Rozwiązałem to przy użyciu mod_xsendfile poleconego przez Maćka - bardzo szybkie i eleganckie rozwiązanie.

Tak z ciekawości zapytam - jakbyś spiął squida, by korzystał z autoryzacji przeprowadzonej już wcześniej przez PHPowy skrypt?
Michał Prokopiuk

Michał Prokopiuk Internet pod
strzechy :)

Temat: Zabezpieczenie plików statycznych na serwerze.

podpowiadam squida, bo apache do dużej ilości dużych plików średnio się nadaje.
w squdzie:
auth_param - wybierz sobie jaki chcesz
redirect_program /path/to/your/script

a w swoim skrypcie piszesz (tu np w ulubionym perlu):
%users = 'ziutek' => 1;
while(<STDIN>) {
my @params = split;
if (${$[2]} == 1) {
print
}
else {
print "http://na.drzewo.pl"
}
}

plusem rozwiązania jest squid który sprawdzi się dużo bardziej niż apache, spójna baza danych (uzytkowników do autoryzacji w squidzie i w hashu users mozesz wczytać z tego samego źródła. A jak Ci się będzie chciało posiedzieć chwilę nad redirectorem to i poziomy dostępu do plików zrobisz.Michał Prokopiuk edytował(a) ten post dnia 17.12.11 o godzinie 03:06
Michał Prokopiuk

Michał Prokopiuk Internet pod
strzechy :)

Temat: Zabezpieczenie plików statycznych na serwerze.

No i plus ostatni - wyeliminujesz php z procesu wysyłania pliku.
Krzysztof Eugeniusz Kotkowicz

Krzysztof Eugeniusz Kotkowicz Freelancer,
Administrator
systemów
teleinformatycznych

Temat: Zabezpieczenie plików statycznych na serwerze.

Michał Prokopiuk:
No i plus ostatni - wyeliminujesz php z procesu wysyłania pliku.

PHP z procesu wyeliminował mi mod_xsendfile - a dodatkowo odpadł mi kolejny daemon, który musiałbym monitorować. :]
Michał Prokopiuk

Michał Prokopiuk Internet pod
strzechy :)

Temat: Zabezpieczenie plików statycznych na serwerze.

Ile masz tych plików i ile pobrań?
Krzysztof Eugeniusz Kotkowicz

Krzysztof Eugeniusz Kotkowicz Freelancer,
Administrator
systemów
teleinformatycznych

Temat: Zabezpieczenie plików statycznych na serwerze.

Michał Prokopiuk:
Ile masz tych plików i ile pobrań?

W tej chwili trudno powiedzieć. Plików koło setek tysięcy, każdy będzie uploadowany raz i pobierany maks. 3 razy. System będzie miał nie więcej niż 100 użytkowników pracujących na raz, tak więc nie przewiduję więcej niż 15-20 downloadów na raz. Squid to w tym momencie za ciężkie bydlę na to.
Michał Prokopiuk

Michał Prokopiuk Internet pod
strzechy :)

Temat: Zabezpieczenie plików statycznych na serwerze.

Faktycznie obciążenie nie za duże, ale przy kilku tylu plikach IO może sprawić troche problemów. Jak bym pomyślał nad hashowaniem katalogów, wdrożeniem jednak nginx i szybkim systemem plików (xfs?, ext z data=writeback?, chociaż to raczej poprawi Ci zapis niż odczyt).

Następna dyskusja:

filtrowanie listy plików




Wyślij zaproszenie do