Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Ukrywanie plików *.jpg na serwerze
Forum PHP.pl > Forum > Przedszkole
klima06
Witam!
Pracuje nad strona, gdzie user po zalogowaniu bedzie mogl wyswietlic/pobrac wczesniej wybrany obraz. Zastanawiam sie jak schowac wszystkie obrazy, by byly niedostepne dla innych userow i osob niezalogowanych.
Myslalem nad wrzuceniem obrazow do bazy danych, ale na moim serwerze mam zaledwie 200mb na baze danych.

Pomysl na jaki wpadlem to:
Utworzyc folder na serwerze, w ktorym beda wszystkie obrazy. Dla tego folderu i wszystkich obrazow wewnatrz ustawic chmod, zeby dostep do nich mial jedynie serwer (btw. jaki to chmod bedzie? tongue.gif). Napisac prosty skrypt php, ktory sprawdzi sesje, czy uzytkownik jest zalogowany, potem sprawdzi w bazie danych czy dany uzytkownik powiniem miec dostep do tego obrazka - jesli tak skrypt php zwroci obraz pobrany z zabezpieczonego folderu.

Czy moj pomysl jest dobry? Czy jest bezpieczny? Czy istnieje mozliwosc obejscia tych moich zabezpieczen?
erix
  1. chyba najbardziej sensowny
  2. zależy od samego skryptu
  3. patrz: #2
b4rt3kk
Możesz zastosować coś w tym guście (w .httaccess):

  1. AddType text/html .jpg


Wtedy wpisanie bezpośredniego adresu do pliku w przeglądarce spowoduje, że plik .jpg będzie traktowany jako tekstowy.
klima06
Cytat(b4rt3kk @ 3.10.2012, 12:15:06 ) *
Możesz zastosować coś w tym guście (w .httaccess):

  1. AddType text/html .jpg


Wtedy wpisanie bezpośredniego adresu do pliku w przeglądarce spowoduje, że plik .jpg będzie traktowany jako tekstowy.


A co z grafika szablonu, ktora rowniez jest w .jpg? Bedzie sie wyswietlac?
b4rt3kk
Tak, grafika będzie się wyświetlać bez problemu, jedynie bezpośredni dostęp do obrazka będzie zablokowany.
erix
Cytat
Wtedy wpisanie bezpośredniego adresu do pliku w przeglądarce spowoduje, że plik .jpg będzie traktowany jako tekstowy.

I co z tego, jak sobie będę mógł go ściągnąć klikając PPM "Zapisz element docelowy"?
b4rt3kk
Z tego co zrozumiałem, to konkretne obrazy mają być wyświetlane dla konkretnych userów, a nie że od razu jest już gotowa i pełna lista, a sposób ten pozwala tylko na zabezpieczenie nieautoryzowanego dostępu, np. jeśli ktoś zna ścieżkę do pliku. Oczywiście można to obejść poprzez hotlinkowanie, co też należałoby wyłączyć na serwerze. Przecież poprzez zmianę chmod w identyczny sposób można zapisać plik na dysk, tj. zapisz element docelowy.
erix
Ale czy Ty rozumiesz...? Z tego, co zauważyłem, to Chrome jest w stanie wyświetlić obrazek nawet z niepoprawnym MIME.

Poza tym chodzi tu o zablokowanie dostępu dla innych, a nie tylko o utrudnienie. Twoja metoda nie blokuje. Odpalę sobie w konsoli:

Kod
wget -o obraz.jpg http://example.org/skrypt.php

który serwuje obrazek wg Twojej metody i jaki będę miał problem? Żaden.
kyku
Dostep do katalogu z obrazkami zablokowac dla kazdego, gleboko ukryc(srednie ale proste rozwiazanie) lub umieszczac w katalogu, do ktorego za pomoca przegladarki sie nie dostaniemy.
Obrazki serwowac poprzez skrypt php
np.
  1. <?php
  2. if($ma_dostep){
  3. Header('Content-Type: image/jpeg');
  4. readfile('/sciezka/do/pliku.jpg');
  5. }
  6. ?>

pamiętaj zabezpieczyc skrypt przed LFI jezeli bedziesz uzywal np. $_GET
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.