Problema flash/php protejare poze

Discutii despre integrarea PHP & Flash; Ming, FlashMX, Actionscript, etc.

Moderator: Moderatori

ShadowElf
PHPRomania Supporter
Mesaje: 18
Membru din: Joi Feb 02, 2006 7:32 pm
Localitate: Iasi

Problema flash/php protejare poze

Mesajde ShadowElf » Mie Sep 15, 2010 10:46 am

Incerc sa fac o combinatie de php/flash/javascript pentru o galerie foto. Principalul atu al acestui script ar fi ca nimeni sa nu poata salva imaginea originala. Pentru a afisa imaginea se incarca jpg-ul intr-un flash si este afisata intr-un anumit fel.

problema mea: cum imi protejez imaginile dintr-un director, in sensul sa le "livreze" doar daca sunt cerute de flashul meu. Am incercat cu verificarea refererului, insa flashul nu trimite referer. Alta idee?



Avatar utilizator
Sim Master
Average Member
Mesaje: 189
Membru din: Dum Aug 22, 2010 4:31 pm
Localitate: Timisoara
Contact:

Mesajde Sim Master » Mie Sep 15, 2010 11:59 am

poti verifica user agent
din cate stiu flashul are "Shockwave Flash"

eventual fa un fisier php si pune codul asta:

Cod: Selectaţi tot

<?php
print_r($_SERVER);
?>

si fa un request cu flash si vezi ce variabile mai sunt in plus pe acolo de care te poti folosi

nevvermind
Senior Member
Mesaje: 1264
Membru din: Mar Iun 22, 2010 3:17 pm

Mesajde nevvermind » Mie Sep 15, 2010 12:42 pm

User-Agent-ul se poate schimba.

link, link, link, link, link.

Avatar utilizator
vectorialpx
Senior Member
Mesaje: 4832
Membru din: Mar Mar 01, 2005 9:48 am
Localitate: Bucuresti
Contact:

Mesajde vectorialpx » Mie Sep 15, 2010 2:32 pm

Protejezi fisierele in folder in care poate citi/executa doar PHP-ul [nu stiu exact sa-ti zic numeric care sunt privilegiile] si le treci prin GD la afisare.

Ca sa poti face aceasta protectie, trebuie sa ai un user autentificat, sau ceva de genul asta si fiecare imagine in baza de date, cu un ID. Inainte sa treci poza prin GD, verifici autentificarea.

Ca sa treci poza prin GD faci ceva de genul asta:
[php] <?php
// verifici autentificarea
// verifici daca poza apartine userului
// $imaginea = imaginea din baza de date care are ID-ul = $_GET['id']
$im = @imagecreatefromjpeg($imaginea) or die('Cannot Initialize');
header ('Content-type: image/jpeg');
imagejpeg($im); imagedestroy($im);
?> [/php]

apoi, link-ul catre poza va fi
http://aasdas.com/getPoza.php?id=3

nevvermind
Senior Member
Mesaje: 1264
Membru din: Mar Iun 22, 2010 3:17 pm

Mesajde nevvermind » Mie Sep 15, 2010 2:42 pm

@vectorialpx - OP nu cred ca vrea sa preia imaginile prin PHP (asta o va face aplicatia lui Flash), ci sa protejeze folderul cu imagini pentru a nu fi accesat via HTTP.

Nu ar fi mai bine sa le scoata din folderul public si sa blocheze accesul prin Apache la celelalte foldere? In felul acesta, imaginile vor fi mai usor de folosit in Flash.

Avatar utilizator
Sim Master
Average Member
Mesaje: 189
Membru din: Dum Aug 22, 2010 4:31 pm
Localitate: Timisoara
Contact:

Mesajde Sim Master » Mie Sep 15, 2010 7:46 pm

dar flashul nu este server-side ceea ce inseamna ca face request la imagini la fel ca si o pagina html nu?
iar daca apache nu da voie sa accesezi folderu respectiv atunci nu poate lua imaginile si atunci va trebui un script php care se va folosi de GD ca sa incarce imaginile din folderul restrictionat. e corect sau spun prostii? :)

nevvermind
Senior Member
Mesaje: 1264
Membru din: Mar Iun 22, 2010 3:17 pm

Mesajde nevvermind » Mie Sep 15, 2010 9:01 pm

Nu, nu cred ca spui prostii.

ShadowElf
PHPRomania Supporter
Mesaje: 18
Membru din: Joi Feb 02, 2006 7:32 pm
Localitate: Iasi

si da si nu

Mesajde ShadowElf » Joi Sep 16, 2010 9:35 am

O parte m-ati inteles, o parte nu.
Flash-ul meu cere imaginea dintr-un director public. Daca parolez acel director flash-ul nu mai poate sa o ia de acolo. daca fac autentificarea automata cu flash nu este bine deoarece oricine poate decompila flash-ul si afla parola.
Prin protejarea imaginii vreau sa spun ca sa nu poata fi incarcata in forma //server.ro/dir/img.jpg insa flash-ul sa o poata cere in aceasta forma.
Am gasit o solutie, atunci cand omul da click pe link sa vada poza, se copie pentru 3 secunde poza intr-un director si se incarca in flash dupa care se sterge, insa nu este 100% protectie, este doar 95% si inca nu sunt multumit.
cine nu cunoaste codul va avea foarte mult de munca sa scoata imaginea originala.

Avatar utilizator
Sim Master
Average Member
Mesaje: 189
Membru din: Dum Aug 22, 2010 4:31 pm
Localitate: Timisoara
Contact:

Mesajde Sim Master » Joi Sep 16, 2010 2:00 pm

mai poti incarca imaginea in baza de date. desi nu e foarte practic si s-ar putea sa mearga ceva mai incet dar macar nu mai ai fisiere pe server

iar ca sa incarci imaginea te folosesti de un script php si verifici user-agentul, versiunea flash si ce ai mai putea verifica

chiar daca nu o sa fie 100% sigur dar un 98% tot e :D

Avatar utilizator
vectorialpx
Senior Member
Mesaje: 4832
Membru din: Mar Mar 01, 2005 9:48 am
Localitate: Bucuresti
Contact:

Mesajde vectorialpx » Joi Sep 16, 2010 3:39 pm

OK.. so

nevvermind scrie:@vectorialpx - OP nu cred ca vrea sa preia imaginile prin PHP (asta o va face aplicatia lui Flash), ci sa protejeze folderul cu imagini pentru a nu fi accesat via HTTP.
ShadowElf scrie:Incerc sa fac o combinatie de php/flash/javascript pentru o galerie foto
Deci, omul stie si PHP [sper!].


nevvermind scrie:Nu ar fi mai bine sa le scoata din folderul public si sa blocheze accesul prin Apache la celelalte foldere? In felul acesta, imaginile vor fi mai usor de folosit in Flash.
Well... tocmai ai zis ca vrei sa le scoti din public. Cum le mai acceseaza HTTP-ul?


Sim Master scrie:dar flashul nu este server-side ceea ce inseamna ca face request la imagini la fel ca si o pagina html nu? iar daca apache nu da voie sa accesezi folderu respectiv atunci nu poate lua imaginile si atunci va trebui un script php care se va folosi de GD ca sa incarce imaginile din folderul restrictionat. e corect sau spun prostii? :)
Da, exact asta am spus. PHP este un intermediar.


ShadowElf scrie:Prin protejarea imaginii vreau sa spun ca sa nu poata fi incarcata in forma //server.ro/dir/img.jpg insa flash-ul sa o poata cere in aceasta forma.
Te contrazici. Cum zicea si Sim Master, Flash este client-side. Daca user-ul nu poate sa vada imaginea, nici Flash nu poate sa o vada.


ShadowElf scrie:Daca parolez acel director flash-ul nu mai poate sa o ia de acolo.
Nu-l "parolezi", doar ii restrictionezi accesul public astfel: da, Flash nu poate vedea si nici user-ul nu poate (asta vrei tu), dar PHP-ul poate. Astfel, poti face ce reguli vrei din PHP pentru acel user

Cred ca poti sa pui 700 pe folder, incearca, nu stiu sigur.

Am gasit o solutie, atunci cand omul da click pe link sa vada poza, se copie pentru 3 secunde poza intr-un director si se incarca in flash dupa care se sterge
Mi se pare o mare prostie. Si daca eu stau pe site mai mult de 3-5 secunde mi se sterge poza ?


edit //
Ceea ce cauti tu nu are solutie practica 100%.
1. Exista print-screen
2. Daca ajunge in browser, ajunge si la mine.
Browser-ul e al meu, tu ai 0 (zero) control asupra lui.

S-a mai discutat p-aici si au incercat multi sa inventeze o roata mai rotunda ca alta... dar nu prea le-a iesit :) pentru ca exista o logica ce te duce in acelasi loc.

nevvermind
Senior Member
Mesaje: 1264
Membru din: Mar Iun 22, 2010 3:17 pm

Mesajde nevvermind » Joi Sep 16, 2010 4:39 pm

O fi existand print screen, dar daca slideshow-ul face resize dinamic la imagini ar fi o idee buna ca folderul cu imaginile in marime naturala din folder sa nu fie accesate, nu?

O idee, cum au sugerat-o unii, e amestecare pseudo-haotica ("obfuscation") a numelor imaginilor sau a URL-ului catre ele. Gen "1kjh1kjh2jh3kjh434.jpg". Evident, aplicatia flash ar terbui sa stie numele fisierului, sau sa decodifice calea catre fisier.

Later edit:
Altele: ar putea pune un "index.php" in folderul cu imagini si un .htaccess tot acolo cu "Options -Indexes" sau "IndexIgnore *.jpg", cum spune aci. Nu ca ma pricep, dar arunc si eu seminte, poate infloresc.
Ultima oară modificat Joi Sep 16, 2010 4:56 pm de către nevvermind, modificat 1 dată în total.

Avatar utilizator
vectorialpx
Senior Member
Mesaje: 4832
Membru din: Mar Mar 01, 2005 9:48 am
Localitate: Bucuresti
Contact:

Mesajde vectorialpx » Joi Sep 16, 2010 4:58 pm

nevvermind scrie:O fi existand print screen, dar daca slideshow-ul face resize dinamic la imagini ar fi o idee buna ca folderul cu imaginile in marime naturala din folder sa nu fie accesate, nu?
Daca vrei sa protejezi niste poze, trebuie sa fi suficient de imbecil sa le pui publice pe cele originale, nu? Si daca se aplica versiunea mea, cu GD, tot nu trebuiesc folosite imaginile originale, mai ales daca sunt mari, pentru ca rupi server-ul.


Cea mai buna solutie, si cu asta inchei, recomandata de oricine, este sa pui watermark pe imaginile publice. Nu ti le ia nimeni si, daca ti le ia, nu are decat sa stea sa scoata watermark-ul in Photoshop. Daca e un watermark mare [daca e un client care vrea musai sa i se protejeze pozele] va fi imposibil sa scoata watermark-ul perfect.

edit // prima data am crezut ca vrei sa faci protectia per user autentificat. Daca vrei sa faci aceasta protectie pentru ORICE user, nu-ti recomand GD pentru ca e inutil... va genera aceeasi poza ca si cum ai lua-o de pe server cu HTTP. Concluzia este ca nu exista o astfel de protectie.

Option -Indexes
E o masura de securitate care trebuie folosita la orice site, nu doar la poze.

Ce se intampla?

Asa e fara
http://blog.vectorialpx.net/b/tpl/images/
[am vrut eu sa fie cu index, din anumite motive]

Asa e cu
http://www.vectorialpx.net/images/

Spor la programat!
Ultima oară modificat Joi Sep 16, 2010 5:19 pm de către vectorialpx, modificat 1 dată în total.

nevvermind
Senior Member
Mesaje: 1264
Membru din: Mar Iun 22, 2010 3:17 pm

Mesajde nevvermind » Joi Sep 16, 2010 5:18 pm

Maestre, nu se numeste "imbecilitate", ci "necunostinta".

Era vorba de protectia imaginilor, in cazul in care ele (originale sau nu), sunt puse in folderul - nu public - ci intr-un altul, accesibil de catre script-ul PHP. Intrebam si sugeram pana aflam ca nu se poate. Si am aflat ca nu prea se poate. Watermark-ul e-o idee buna.

Sper ca OP-ul e convins ca trebuie utilizata metoda sugerata de tine, in speranta ca nu vei face BSoD daca procedeaza altfel. :lol:

Avatar utilizator
Sim Master
Average Member
Mesaje: 189
Membru din: Dum Aug 22, 2010 4:31 pm
Localitate: Timisoara
Contact:

Mesajde Sim Master » Joi Sep 16, 2010 5:20 pm

si ca un "P.S.", daca folosesti PHP pentru procesarea imaginilor atunci nu e obligatoriu sa tii fisierele (pozele) in public_html, poti sa le pui in afara si atunci stii sigur ca nu vor fi accesate

Avatar utilizator
vectorialpx
Senior Member
Mesaje: 4832
Membru din: Mar Mar 01, 2005 9:48 am
Localitate: Bucuresti
Contact:

Mesajde vectorialpx » Joi Sep 16, 2010 5:25 pm

nevvermind scrie:Maestre, nu se numeste "imbecilitate", ci "necunostinta".
Daca vrei sa protejezi o valiza si o lasi in mijlocul bulevardului, ducandu-te la WC, nu inseamna ca esti "necunoscator" :)

Repet: daca nu se vrea restrictionarea userilor logati [controlati de PHP] atunci varianta cu GD pica, pentru ca este inutila [mananca resurse inutil, pentru ca GD-ul este un mare consumator]. Cea mai buna solutie e watermark-ul.

Pentru hoti, exista Firebug [extensia firefox], care iti aduce la suprafata orice proces si request din site. So, cum ziceam, browser-ul nu poate sa fie controlat.

Sim Master scrie:si ca un "P.S.", daca folosesti PHP pentru procesarea imaginilor atunci nu e obligatoriu sa tii fisierele (pozele) in public_html, poti sa le pui in afara si atunci stii sigur ca nu vor fi accesate
good point!


PS-ul meu: [parerea mea]
Imaginile stocate in baza de date sunt cea mai mare prostie.


Înapoi la “PHP & Flash”

Cine este conectat

Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 6 vizitatori