slewhut
20.07.2009, 13:25:16
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
20.07.2009, 13:54:40
google -> hotlinkowanie (zabezpieczenia)
slewhut
20.07.2009, 14:14:37
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
20.07.2009, 14:19:06
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
20.07.2009, 14:25:15
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

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
erix
20.07.2009, 14:26:20
Cytat
ale bezpośredniej próby oglądnięcia zdjęcia wpisując adres zdjęcia w adresie przeglądarki.
Chyba
obejrzenia...

Walczysz z wiatrakami, tyle powiem.
slewhut
20.07.2009, 14:29:51
No co wy gadacie?? Naprawdę jest to aż tak złożone zagadnienie? Nikt mi nie może pomóc? Żadnych zabezpieczeń?
erix
20.07.2009, 14:35:55
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
20.07.2009, 14:39:55
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
Daiquiri
20.07.2009, 17:12:13
Cytat(slewhut @ 20.07.2009, 15:39:55 )

Wystarczy tam stworzyć index.html?

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

.
Chyba, że będziesz wrzucał te fotki poza poza public_html.
erix
20.07.2009, 18:04:37
Ale tak, czy siak, tego przeglądarka nie odczyta.

Nie kombinuj
Fifi209
21.07.2009, 01:00:29
Nie ma sensu nic takiego robić. Co trafia do użytkownika zawsze może być zapisywane, edytowane, usuwane.
Foldery możesz zabezpieczać .htaccess
Z tym GD nawet niezły pomysł, ale wiesz jakie wygenerowałbyś obciążenie?
tomekpl
21.07.2009, 01:35:49
Można to zrobić

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

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
21.07.2009, 08:06:24
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
21.07.2009, 08:11:00
Możesz zrobić dostęp do zdjęcia tylko po zalogowaniu. Takie coś jest możliwe.
pyro
21.07.2009, 08:14:58
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
<?php
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')) {
header('Content-Type: image/jpeg'); }
?>
Oczywiście to tylko najprostszy prototyp. Dopasuj go sobie. (+ zabezpiecz)
wookieb
21.07.2009, 08:23:39
Dostep do pliku po zalogowaniu a dostep po bezposrednim adresie to jest roznica i tej drugiej nie da się zrealizować.
pyro
21.07.2009, 09:06:39
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
21.07.2009, 09:48:56
To mi się podoba

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
21.07.2009, 10:09:35
No to tylko na darmowych, wiec czym się martwisz?
erix
21.07.2009, 10:33:02
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.
bełdzio
21.07.2009, 10:45:29
viking
21.07.2009, 11:45:16
BlackPig
4.03.2010, 17:49:30
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:
if($zalogowany){
header('Content-Transfer-Encoding: binary'); header('Content-Type: application/x-unknown'); //tutaj by trzeba zmienic w zależności od formatu obrazka header("Content-Disposition: attachment; filename=[jakas nazwa]"); //nazwe mozesz przekazac getem }
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

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