Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Zabezpieczenie plików jpg, png
Forum PHP.pl > Forum > Przedszkole
slewhut
Piszę portal randkowy w którym część zdjęć ma być dostępna tylko dla znajomych.
Napisałem już logowanie, tworzenie nowych profili, edytowanie ich itd... Mój problem zabezpieczenia zdjęć nie dotyczy nie wyświetlania ich na stronie danego profilu (bo z tym sobie poradzę), ale bezpośredniej próby oglądnięcia zdjęcia wpisując adres zdjęcia w adresie przeglądarki.
Korzystam z sesji.

Narazie zrobiłem, że zdjęcia prywatne mają osobny folder z plikiem ".htaccess" o treści "Deny from all" no i do samych zdjęć chce się odwoływać skryptem php korzystając z GD. No i nie wiem czy jest to dobre rozwiązanie, bo będzie mocno obciążało...

Proszę o pomoc.
Fifi209
google -> hotlinkowanie (zabezpieczenia)
slewhut
No ale hotlinkowanie to zabezpieczenie przed wejściem z innej domeny (z tego co teraz czytam), a u mnie problem dotyczy wejścia nadal z tej samej domeny.

Mam folder xyz i w nim są prywatne zdjęcia. I ktoś od kolegi dostanie bezpośredni adres do obrazka www.serwis.pl/xyz/obrazek.jpg no i go oglądnie. A ja chce aby tylko zalogowani uzytkownicy mogli oglądnąć ten obrazek.
Marcuez
Cięzko będzie bo nawet z naszej-klasy można odczytać obrazki bez zalogowania.
Look http://photos.nasza-klasa.pl/11659879/9/main/bba434d184.jpeg
slewhut
Mogę naprawdę zaszaleć i użyć GD, tak że do obrazków prywatnych będę za każdym razem sprawdzał czy zalogowany profil jest znajomym właściciela danego obrazka (minimum 3 strzały mysqla) HORROR exclamation.gif Chociaż może sesje jakoś wykorzystać... I wtedy zrobić to tak, że wchodząc na profil w sesji pojawia mi się tablica obrazków prywatnych do oglądnięcia, a już sam obrazek sprawdza czy znajduje się w sesji... Chociaż i to nie jest do ominięcia biggrin.gif
erix
Cytat
ale bezpośredniej próby oglądnięcia zdjęcia wpisując adres zdjęcia w adresie przeglądarki.

Chyba obejrzenia... dry.gif

Walczysz z wiatrakami, tyle powiem.
slewhut
No co wy gadacie?? Naprawdę jest to aż tak złożone zagadnienie? Nikt mi nie może pomóc? Żadnych zabezpieczeń?
erix
NIE DA SIĘ.

Wszystko, co trafia do przeglądarki, można zapisać. I nawet nie dyskutuj, bo można wcisnąć przecież print-screen i na nic Twoje "zabezpieczenia".

Nie da się i już.
slewhut
No dobrze masz rację. Print screen... No dobrze, a jak zablokować dostęp bezpośrednio do folderu? Pod tym względem jestem zielony... Tzn aby nie można było wejść w sam folder ze zdjęciami... Wystarczy tam stworzyć index.html? Czy jakoś to będzie można obejść? Interesowało by mnie poprostu bezpośrednie przekierowanie na główna stronę serwisu jakoś mi pomoże w tym .htaccess questionmark.gif
Daiquiri
Cytat(slewhut @ 20.07.2009, 15:39:55 ) *
Wystarczy tam stworzyć index.html? questionmark.gif


Wtedy się nie "wylistuje", ale znając nazwę pliku wejdziesz bez problemu.

Jeżeli jesteś zdesperowany to zawsze możesz zmienić rozszerzenia plików z np. *jpeg na *xyz a przy odczytywaniu ich przez Twój system przenosić je do temp i tam zmieniać rozszerzenie na właściwe + coś na hotlinkowanie + chmody. Chociaż jak dla mnie nie ma to sensu bo i tak pliki da się zapisać, zmienić rozszerzenie na dysku i wiadomo co dalej sciana.gif.

Chyba, że będziesz wrzucał te fotki poza poza public_html.
erix
Ale tak, czy siak, tego przeglądarka nie odczyta. tongue.gif

Nie kombinuj tongue.gif
Fifi209
Nie ma sensu nic takiego robić. Co trafia do użytkownika zawsze może być zapisywane, edytowane, usuwane. winksmiley.jpg

Foldery możesz zabezpieczać .htaccess

Z tym GD nawet niezły pomysł, ale wiesz jakie wygenerowałbyś obciążenie? snitch.gif
tomekpl
Można to zrobić smile.gif
strona.pl/images/images.php?p=43d32f4

Coś takiego i w pliku images.php ustawiasz np:

$obrazek=$_GET['p'];
$obrazek=md5($obrazek);
echo "<img src="images/$obrazek.jpg" />

A nie.. jednak się nie da tongue.gif bo i tak zobaczy. Nie wiem czy to w ogóle komu potrzebne ..
.......

Ewentualnie możesz dać mod_rewrite
s.pl/images/obrazek.jpg
gdzie obrazek.jpg nie bedzie obrazkiem lecz plikiem z php, gdzie uzyjesz warunków
Agape
A rapidshare? Nie da się pobrać pliku jeżeli Ci na to nie pozwoli, chociaż byś miał link. Chyba, że wygenerowany przez konto premium, ale nie da się go "wyczarować" ot tak, trzeba mieć konto premium. Serwis istnieje od tylu lat i nie ma na niego sposobu.

Nie wiem jak dokładnie jest to zrobione ale daje tylko przykład.

Ps. Patrzyłeś czy jakiś serwis tego typu ma zabezpieczone fotki? Jak nie to nie ma co się trudzić wydaje mi się. Chyba, że to ma być jakiś atut portalu którym chcesz się chwalić.
wookieb
Możesz zrobić dostęp do zdjęcia tylko po zalogowaniu. Takie coś jest możliwe.
pyro
Jest to bez sensu, ale da się (nie wiem czemu Panowie wyżej mówią, że nie).

- Folder ze zdjęciami i .htaccess `Deny From All`
- Odwoływanie się do zdjęcia np. poprzez $_GET['image'];

fotka.php

  1. <?php
  2. if(!empty($_SESSION['logged'])  /* i tutaj sprawdzasz co chcesz, czy np. zmienną mowiącą, że to znajomy czy coś w tym stylu */ && file_exists($img = 'images/'.$_GET['image'].'.jpg'))
  3. {
  4. header('Content-Type: image/jpeg');
  5. readfile($img);
  6. }
  7. ?>


Oczywiście to tylko najprostszy prototyp. Dopasuj go sobie. (+ zabezpiecz)
wookieb
Dostep do pliku po zalogowaniu a dostep po bezposrednim adresie to jest roznica i tej drugiej nie da się zrealizować.
pyro
Cytat(wookieb @ 21.07.2009, 09:23:39 ) *
Dostep do pliku po zalogowaniu a dostep po bezposrednim adresie to jest roznica i tej drugiej nie da się zrealizować.


To nie musi być logowanie, ono wogóle nie musi istnieć. Może to być nawet zwykła strona w profilu. Przecież wyraźnie zaznaczyłem, że to tylko przykład.
slewhut
To mi się podoba smile.gif Ciekawa dyskusja... Pomysł pyro w sumie opisywałem w pierwszym, czy drugim poście. Ale jak narazie nie chce aż tak bardzo zabijać serwera... Bo to wtedy zapewne byłoby mordercą mojego serwisu... Zresztą do sesji da się włamać i wcisnąć własne zmienne (o czymś takim przynajmniej czytałem, ale nie pamiętam nazwy atatku, ale to tylko na darmowych serwerach)...
wookieb
No to tylko na darmowych, wiec czym się martwisz?
erix
No i co z tego, gdy zalogowany w dalszym ciągu może zapisać.

Poza tym, zajeżdżany jest niepotrzebnie serwer, bo takie rozwiązanie angażuje interpreter. Stąd -> serwer nie może korzystać z mapowania pamięci, systemowego cache plików i innych rzeczy.

Przy większym obciążeniu da się we znaki.
viking
http://redmine.lighttpd.net/projects/light...:ModSecDownload
W apache był jakiś odpowiednik.
BlackPig
Ja robię tak (z dowolnymi plikami, ale do grafiki można przystosować):
1. Ustawiam tak uprawnienia do plików, żeby dostęp do nich miał tylko skrypt php,a nie każdy (chmod)
2. piszę skrypt "getfile.php" który będzie pobierał pliki, który z grubsza wygląda tak:
  1. if($zalogowany){
  2. header('Pragma: no-cache');
  3. header('Content-Transfer-Encoding: binary');
  4. header('Content-Type: application/x-unknown'); //tutaj by trzeba zmienic w zależności od formatu obrazka
  5. header("Content-Disposition: attachment; filename=[jakas nazwa]"); //nazwe mozesz przekazac getem
  6. echo file_get_contents($_GET['plik']); //nazwa pliku, ktory ma byc zwrocony
  7. }


do wszystkich plikow linkujemy:
naszadomena.pl/getfile.php?plik=pamela.jpg
odwołanie:
naszadomena.pl/pamela.jpg
skutkuje komunikatem że you don't have permisions winksmiley.jpg

pozdrawiam smile.gif
Blame
@up
I dzięki temu możemy pobrać dowolny plik z serwera, jakieś zabezpieczenie by się przydało winksmiley.jpg
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.