[PHP] protection acces repertoire photo

Fermé
Clorish Messages postés 48 Date d'inscription dimanche 15 juin 2003 Statut Membre Dernière intervention 6 décembre 2007 - 11 oct. 2006 à 14:49
 honeywell - 14 sept. 2008 à 00:43
Bonjour,

J'ai un souci lors de la securisation de mon site web.
Je souhaiterais afficher sur une page des images personnelles tout en restreignant l'acces direct a ces photos ou en saisissant l'url du repertoire racine.

J'ai essaye une protection par htaccess mais on me demande un mot de passe lorsque je souhaite afficher une page contenant une image qui se trouve dans ce repertoire protege.
Comment valider automatiquement (ou authentifier) un utilisateur depuis un script php afin d'eviter a ce dernier de le faire via la petite fenetre ? JE demande deja une identification via un ecran de connection php/mysql pour acceder au site.

Ou alors quel autre systeme je peut mettre en place ?
A voir également:

10 réponses

Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
12 oct. 2006 à 13:13
Bonjour,

"Je souhaiterais afficher sur une page des images personnelles tout en restreignant l'acces direct a ces photos"

Tu veux dire qu'une image doit pouvoir être affichée sur ton site, mais que si quelqu'un tape l'url tonSite/image.jpg , il ne doit pas pouvoir la visualiser, c'est ça ?

C'est pas simple, mais c'est possible.

1 - mets les images dans un répertoire dont le nom n'est pas évident (car si ton serveur php y accède, l'accès sera forcément autorisé par l'url... A condition de connaitre l'URL !)

2 - crée une page php du genre "image.php", qui prend en paramètre un numéro ou un nom d'image.

3 - dans image.php, met un code qui ressemble à

if (!$_SESSION["imageOK"])
  die("Accès interdit");

$im = imagecreatefromjpeg("cheminSecret/".$_GET["nomImage"]);
imagejpeg($im);


Et dans la page qui contient l'image, tu l'appelles comme ceci :
$_SESSION["imageOK"] = true;
[...]
<img src="image.php?nomImage=image1.jpg" />


Comme ça, les images seront accessibles uniquement aux utilisateurs ayant une session d'ouverte : les liens directs auront donc une durée de vie très restreinte. Tu peux surement trouver un moyen d'améliorer ce système (après tout, ça ne fait que 10 minutes que j'y pense !), mais voilà à mon avis une base qui te permettrait de protéger tes images des personnes "normales", qui ne vont pas vouloir tout bidouiller. (Après, forcément, si quelqu'un arrive à lire le code de image.php, il va pouvoir trouver l'adresse de stockage des images, et y accéder...)

J'espère que ça t'aidera.

Xavier
2
Bergie Messages postés 139 Date d'inscription mercredi 27 septembre 2006 Statut Membre Dernière intervention 7 mars 2009 7
12 oct. 2006 à 13:27
Une question, si on passe par ce que tu expliques, on aura toujours accès quand même aux fichiers, il suffit de lire le lien de l'image non ?

De toute facon il est impossible de protéger des images complètement à partir du moment où elles sont affichées :

mythes on peut proteger une page web une image contre la copie
webmaster empecher la copie de mes images et autres

Donc voila, tu es vite fixé en lisant ces pages !

Et dans tous les cas, un "imprime écran" et une sauvagarde permet tjrs d'enregistrer une image présente à ton écran !
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011 > Bergie Messages postés 139 Date d'inscription mercredi 27 septembre 2006 Statut Membre Dernière intervention 7 mars 2009
12 oct. 2006 à 14:27
Bergie : oui bien sûr, j'avais déjà lu ces quelques lignes sur la copie d'image, qui ne m'avaient d'ailleurs rien appris.
Il est évident qu'à partir du moment où une image existe et est visible en ligne, il existe un moyen de la récupérer. Mais il y a des méthodes qui permettent de compliquer ce moyen.
Celle que je donne en est une. En collant l'adresse de l'image, tu la récupèreras UNIQUEMENT si une session sur le site est ouverte sur ton ordinateur. Et cela signifie qu'il faut être enregistré sur le site (puisqu'il y a un formulaire d'identification). Ainsi, si tu copies-colles l'adresse de cette image sur un forum, par exemple, cela ne permettra à personne de la voir. On peut même coller une image transparente par dessus toutes les images du site : lorsque l'utilisateur fera un clic droit -> enregistrer sous, c'est cette image transparente qui sera prise en compte.

L'"imprime écran" fonctionne aussi, et là, c'est sûr que rien ne peut l'en empêcher. Encore que... Je ne sais pas si cette touche du clavier correspond à une commande capturable en javascript, mais si ça se trouve, on peut fermer la fenêtre au moment où cette touche est activée. Je n'ai pas essayé, je dirais à vue d'oeil qu'il y a peu de chances que ça marche, mais bon...

Bref, tu as raison, une image affichée par un navigateur web peut toujours être téléchargée / récupérer. Mais cela ne signifie pas pour autant que c'est toujours facile, et qu'il n'y a aucun moyen de se prévenir des façons les plus évidentes de faire...
0
Bergie Messages postés 139 Date d'inscription mercredi 27 septembre 2006 Statut Membre Dernière intervention 7 mars 2009 7 > Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021
12 oct. 2006 à 14:37
Je ne disais pas ça pour t'embêter, mais just epour lui dire que quoi qu'il fasse, il n'arrivera pas à protéger entièrement ses photos.

Je pense en revanche, que le script d'authentification comme tu l'as proposé est une des meilleurs façon pour permettre uniquement de montrer les photos à des personnes inscrites et si on rajoute quelques variabels, juste à certaines personnes et pas forcément toutes !

C'est un bon point.
Sur ce, j'ai un pb en C, j'ai posté sur le forum, si tu t'y connais ...
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011 > Bergie Messages postés 139 Date d'inscription mercredi 27 septembre 2006 Statut Membre Dernière intervention 7 mars 2009
12 oct. 2006 à 14:52
Ne t'inquiète pas, je ne l'ai pas mal pris :)

Par contre, je suis allé faire un tour sur ton problème, mais je ne m'y connais absolument pas en C, ni en traitement d'images... Je ne peux pas t'aider, désolé :-/
0
_ArKhAoN_ Messages postés 17 Date d'inscription mardi 18 juillet 2006 Statut Membre Dernière intervention 18 octobre 2006 2
18 oct. 2006 à 11:51
Voila j'allais pas tout laisser comme ça, j'ai fait ceci pour les sessions :

image_test.php

<?
session_start();
$_SESSION['ok'] = 1;
?>
coucou tout le monde

<br />
<img src="affiche_image.php?id=1">

-------------------------------

affiche_image.php


<?php
session_start();
if($_SESSION['ok'] == 1)
{
@mysql_connect('sql.imingo.net', 'yves10', 'mov56edk');
@mysql_select_db("yves10_log");
$requete = "SELECT donnees_binaires,type_fichier FROM images_binaires WHERE id=$id";
$resultat = @mysql_query($requete);
$donnees = @mysql_result($resultat,images_binaires.donnees_binaires);
$type = @mysql_result($resultat,0,images_binaires.type_fichier);
header( "content-type: $type");
echo $donnees;
}
?>


----------------------------

j'ai mis ceci en ligne pour que vous pouviez regarder par vous même

essayez d'abord sur cette adresse http:// yves10.imingo.net/affiche_image.php?id=1

rien ne s'affiche, allez sur

http:// yves10.imingo.net/image_test.php

l'image s'affiche, faites clique droit propriétés sur la photo, vous aurez affiche_image.php?id=1, désormais la session est ok alors si vous retournez la bas vous y aurez accès.
1
Bergie Messages postés 139 Date d'inscription mercredi 27 septembre 2006 Statut Membre Dernière intervention 7 mars 2009 7
18 oct. 2006 à 13:23
Salut

Juste une remarque TRES IMPORTANTE !

Tu viens juste de nous donner toutes les clés pour entrer dans tes bases sql, de modifier ton site etc ...

Je m'explique, tu as laissé ta source telle quelle sans modifier ni ton login, ni ton mot de passe (apparemment, vu que le login semble etre le bon, le passe semble être un passe digne de ce nom ...)

Bref, je te conseille vivement d'alerter un modérateur et de demander à modifier ton message au plus vite, avant que des petits malins ne modifient ton site !!

(Conseil d'ami ...)

++
0
Bergie Messages postés 139 Date d'inscription mercredi 27 septembre 2006 Statut Membre Dernière intervention 7 mars 2009 7
12 oct. 2006 à 11:04
Bonjour

Ce que tu veux faire est étrange.
Tu veux afficher ses photos, mais protéger le répertoire, c'est bien ça ?
Sache que si tu affiches tes images dans une page web qui est accesible par tout le monde, ils peuvent enregistrer ces images, elles ne seront pas protégées, peu importe la protection que tu mets dessus.

Sinon, si le htaccess ne fonctionne pas, tu as toujours le moyen très simple de créer un fichier index.php ou index.htm dans ton répertoire de photos, ainsi lorsque la personne essayera de taper l'url du répertoire c'est le fichier index qui se lance et non pas l'explorateur de dossiers.

Je ne sais pas si cette solution te convient, mais c'est toujours faisable.
0
Clorish Messages postés 48 Date d'inscription dimanche 15 juin 2003 Statut Membre Dernière intervention 6 décembre 2007 7
14 oct. 2006 à 13:06
Merci a tous d'avoir repondu.

Alors juste quelques precisions :
LEs pages qui affichent les photos ne sont pas en acces libre bien sur !
Je gere les connection via un ecran de connection et en comparant les couples login/passwd avec ceux inscrit dans une DB Mysql.

Pour ce qui est de la protection du "listing" sauvage d'un repertoire, la presence d'un fichier index.html ou php est efficace mais n'interdit pas l'acces, notement via des explorateurs de site du style de Free Download Manager.

J'ai bien noté ton astuce du "createimagefromjpg" j'ai deja vu un code similaire quelque part et ca m'interesse. Ca evite effectivemetn de laisser trainer l'url direct dans "copier l'adresse de l'image".

Ce que je souhaitais surtout, c'est que quelqu'un qui n'a pas acces au site ne puisse pas acceder aux photos via des explorateurs, ou en traficotant un peu.
Apres bien sur on ne peut pas empecher les capture d'ecran ... mais bon le principe de l'inscription est de controler les acces pour des personnes digne de confiance.

Sinon au passage, j'ai trouve une solution bete mais efficace :
La ligne "options -Indexes" qui permet d'interdire le listing des fichiers. Cela bloque aussi les explorateurs.

Cette astuce combiné au systeme d'affichage des images via "createimagefromjpg" pour eviter de donner la possibiliter de divulguer le chemin d'acces aux fichiers, on devrais arriver a quelque chose de bon :)

Note : LEs noms des fichiers sont aussi dans la DB, donc, un ID suffit en argument de page, bien souvent un ID de liste des ID des photos et non directement l'ID de la photo elle meme ....
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
_ArKhAoN_ Messages postés 17 Date d'inscription mardi 18 juillet 2006 Statut Membre Dernière intervention 18 octobre 2006 2
18 oct. 2006 à 11:14
Le mieux que tu aurais à faire est d'insérer tes images en binaire dans ta base de données, il n'y aurait pas d'adresse absolue de celles-ci et tu les appellerai directement dans ta page.
0
_ArKhAoN_ Messages postés 17 Date d'inscription mardi 18 juillet 2006 Statut Membre Dernière intervention 18 octobre 2006 2
18 oct. 2006 à 11:20
Stocker directement des images avec MySQL
Il nous faut créer une base (nous l'appellerons "essai") et une table (nous l'appellerons "images_binaires") qui comprendra les champs suivants: id (un entier), donnees_binaires (type MySQL LONGBLOB), nom_fichier (une chaîne), taille_fichier (une chaîne), type_fichier (une chaîne), et, éventuellement, un champ description (une chaîne). On n'oubliera pas de préciser "auto_increment" pour l'identifiant. Nous allons insérer les images dans la base à l'aide, par exemple, d'un formulaire HTML. Il ressemblera à:

<form method="post" action="inserer_image.php" enctype="multipart/form-data">
Nom du fichier: <input type="file" name="image" size="40">
<br><input type="submit" name="ok">
</form>

Notre programme inserer_image.php sera alors le suivant:

<?php
mysql_connect('localhost', 'root', '');
mysql_select_db("essai");
$donnees = addslashes(fread(fopen($image, "r"), filesize($image)));
$result=mysql_query("INSERT INTO images_binaires (donnees_binaires,nom_fichier,taille_fichier,type_fichier) VALUES ('$donnees','$image_name','$image_size','$image_type')");
$id= mysql_insert_id();
print "<br>Indentifiant du fichier dans la base: $id<br>";
mysql_close();
?>

Un petit programme php, afficher_image.php, va permettre de récupérer l'image dans la base:

<?php
@mysql_connect('localhost', 'root', '');
@mysql_select_db("essai");
$requete = "SELECT donnees_binaires,type_fichier FROM images_binaires WHERE id=$id";
$resultat = @mysql_query($requete);
$donnees = @mysql_result($resultat,images_binaires.donnees_binaires);
$type = @mysql_result($resultat,0,images_binaires.type_fichier);
header( "content-type: $type");
echo $donnees;
?>

On appellera ce programme avec une instruction HTML du type:

<img src="afficher_image.php"?id=identifiant>

où l'on précisera l'identifiant correspondant.


c'est la meilleurs façon non?

j'espère seulement que t'as pas 250 photos
0
_ArKhAoN_ Messages postés 17 Date d'inscription mardi 18 juillet 2006 Statut Membre Dernière intervention 18 octobre 2006 2
18 oct. 2006 à 11:41
Je sais qu'avec ce code l'id de la photo se trouves en get, mais si tu gère un peu les sessions, ben tu pourras facilement contourner ceci et faire que la photo ne s'affiche que si la page en question l'appelle,

je tient à rectifier un morceau de code qui est

<img src="afficher_image.php"?id=identifiant>


le guilmet doit se trouver après identifiant

<img src="afficher_image.php?id=2">
(par exemple)

bon courage
0
_ArKhAoN_ Messages postés 17 Date d'inscription mardi 18 juillet 2006 Statut Membre Dernière intervention 18 octobre 2006 2
18 oct. 2006 à 22:46
non tkt pas de soucis, le pass est bidon, merci de m'avoir signaler, d'ailleurs si ça avait été le cas, et comme je viens de m'en appercevoir, mon site serait déja sur orbite à l'heure actuelle,

merci en tout cas, si ça avait été le cas, j'aurais été dans la *** @+
0
Moi je te conseil simplement si bien sur tu est bon en flash, de créer ton album d'images au format flash.
Mes sache qu'il y aura toujours moyen pour des petit malin de prendre tes images, soit par la décompilation du flash, ou par capture simple.
exemple : http://www.media-son.com/photo/Animation_sportive_et_commerciale/album_sport.swf
0
hello
j'aime bien ton idée de mettre les photos en flash !
bonne presentation, c'est sympa ! comment tu t'y es pris ?? quel logiciels ?

je sais pas si tu peux m'aider !
j'aimerai dans un onglet photo sur mon site web , avec acces login et mot de passe , et avec telle acces
si l'acces est bon , il voit les images privé , sinon si pas acces, que les images publiques !

merci
0
Si c'est une question de droit sur l'image:

Astuce simple (mais efficace) :

- N'enregistrez jamais d'image non compressée ou dont les dimensions correspondent à l'originale, c'est simple.

Les droits d'auteur exigent le fardeau de la preuve: je ne crois pas qu'un photographe amateur prendra du plaisir à disposer d'une photo jpg compressée ou d'un png réduit de moitié par rapport à l'original.

Si tu possède l'image originale, alors pourquoi se soucier de ce que les autres en feront? Sinon, c'est de la chasse au sorcières ;-p

Mon opinion!
0