Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] dostęp do plików wyłącznie po zalogowaniu
Forum PHP.pl > Forum > Gotowe rozwiązania
Saint
Mam taki problem bo chcę zrobić tak aby tylko po autoryzacji możliwy był dostęp do plików graficznych po zalogowaniu tj. tak aby gdy ktoś wpisze odpowiedni adres do pliku graficznego np. Jan.kowalski.pl/galeria/1.jpg żeby zobaczył tylko informacje o tym że nie ma do niego dostępu.
talee
tak jak opisałeś ne da się, a raczej można tylko trzeba zamieszać w konfiguracji serwera, a wątpię byś miał dostęp do tego typu operacji.

Pozostaje substytut:

po pierwsze umieszczasz sobie obrazki w jamiś tajnym katalogu nazwa może być wygenerowana np md5(), żeby nikt ci ne wyniuchał nazwy do tego niego. Zapisujesz pusty plik index.html to po to np. żeby ktoś dziwnym trafem ne przykumał nazwy katalogu i ne zrobił sobie listingu zawartość o ile serw mu na to pozwala, dorzucasz tam grafiki możesz je dodatkowo zabezpieczyć via jakiś hash w nazwie hash_nazwaPliku.(jpg|png|gif)

piszesz sobie skrypt w którym wypluwasz obrazki na podstawie argumentu 'nazwaPliku', oczywiście w skrypcie autoryzujesz użytkownika, ustawiasz odpowiedni nagłówek MIME i readfile() ...
Saint
Cytat
piszesz sobie skrypt w którym wypluwasz obrazki na podstawie argumentu 'nazwaPliku', oczywiście w skrypcie autoryzujesz użytkownika, ustawiasz odpowiedni nagłówek MIME i readfile() ...


robiłeś cos takiego już? możesz jakiś praktyczny przykład podać?
talee
[php:1:7f343e0380]<?php
require('auth.inc.php');

$photo = 'nazwa_tajnego_katalogu/';

$photo = $photo . $_GET['name'];

header('Content-type: image/jpeg');
header('Content-transfer-encoding: binary');
header('Content-length: '. filesize($photo));

readfile($photo);
?>[/php:1:7f343e0380]

oczywiście do dopieszczenia np. czy est argument name, ewentualnie jakaś wartość domyślna, czy plik istnieje, no i odpowiedni nagłówek Content-type: image/(jpeg|gif|png)
Bora
można jeszcze fotki przechowywać np w mysql
Saint
Dobrze może z inaczej napisze dokładnie o co mi chodzi. Mianowicie chce utworzyć płatną galerie zdjęć, korzystam z usług firmy allpay.pl oni tam mają taki prosty skrypt:

sprawdzacz.php
[php:1:6b3b37bef8]<?php
# skrypt sprawdzający ważność kodu
if (!isset($_COOKIE['ActiveCode']))
{
print "time out<BR>";
unset($_COOKIE[session_name()]);
exit;
}
?>[/php:1:6b3b37bef8]

sprawdz.php
[php:1:6b3b37bef8]<?php
$id = 1234; # numer ID zarejestrowanego klienta
$code = "xyz"; # nazwa konta z bezobsługowymi kodami
$type = "c1"; # typ konta: C1 - 8 znakowy kod bezobsługowy
# typ konta: sms dla sprawdzania SMSow

$handle = fopen("http://allpay.pl/check_code.php?id=".$id."&code=".$code."&check=".$check."&type=".$type."", 'r');
$status = fgets($handle, 8);
$czas_zycia = fgets($handle, 24);
fclose($handle);
$czas_zycia = rtrim($czas_zycia);



if ($status == 0) {print "Kod niepoprawny."; exit;} # gdy kod niepoprawny
else
{ # gdy kod poprawny:
if (!isset($_COOKIE['ActiveCode']))
{
setcookie('ActiveCode',1, time()+$czas_zycia);
}
else
{
setcookie('ActiveCode',0, time()+2, "/");
setcookie('ActiveCode',1, time()+$czas_zycia, "/");
}
header("Location: main.php"); # włączenie strony głównej
}
?>[/php:1:6b3b37bef8]

main.php
[php:1:6b3b37bef8]<?php
include "sprawdzacz.php"; #sprawdzenie, czy klient ma prawo jeszcze przegladac strony z czesci platnej
?>

<A HREF=main.php>link</A>
[/php:1:6b3b37bef8]

index.html
[xml:1:6b3b37bef8]<HTML>
<HEAD><META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=iso-8859-2">
<TITLE>Strona testowa</TITLE></HEAD>
<BODY>

<FORM ACTION="sprawdz.php" METHOD=POST>
Aby wejść do płatnej części serwisu, musisz wprowadzić kod: <INPUT TYPE=TEXT NAME="check" SIZE=10 MAXLENGTH=8><BR>
<BR>
<CENTER><INPUT TYPE=SUBMIT VALUE="Wejście"></CENTER>
</FORM>

</HTML>
[/xml:1:6b3b37bef8]

Klient dokonuje opłaty kartą kredytową i otrzymuje kod który wpisuje na stronie aby wejść do części płatnej. Autoryzacja odbywa się za pośrednictwem serwera allpay.pl który weryfikuje kod dostępu czy jest poprawny czy nie i czy jest aktualny.

Jaki jest mój problem?

A no taki, że chce aby nie tylko sam html / php był zabezpieczony przed wpisaniem poprawnego adresu (dodając w pliku html <FORM ACTION="sprawdz.php" METHOD=POST>), ale i obrazki / zdjęcia bo przecież każdy może sobie sprawdzić właściwości takiego obrazka i wpisując odpowiedni link ściągnąć go za darmo. Chciałbym w oparciu o tą autoryzacje w prosty sposób uzyskać dobre zabezpieczenie zdjęć przed potencjalnymi złodziejami.
talee
wszystko masz podane na tacy wystarczy trochę pomyśleć
photo.php
[php:1:8aa2a93805]<?php
if (!isset($_COOKIE['ActiveCode'])) {
unset($_COOKIE[session_name()]);
$name = 'odmowa.dostepu.jpg';
}
else {
if (isset(isset($_GET['name']))) {
$name = $_GET['name'];
}
else {
$name = 'domyslny.jpg';
}
}

$photo_dir = 'nazwa_tajnego_katalogu/';

$name = $photo_dir . $name;

header('Content-type: image/jpeg');
header('Content-transfer-encoding: binary');
header('Content-length: '. filesize($name));

readfile($name);
?>[/php:1:8aa2a93805]
+ uwagi z poprzedniego post'u
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.