Le script PHP tant attendu : protection des images

Consultez la formation à Google Analytics de WebRankInfo / Ranking Metrics


aladdin
WRInaute passionné
WRInaute passionné
 
Messages: 925
Inscription: Ven Avr 29, 2005 12:26

Le script PHP tant attendu : protection des images

Message le Mar Mai 10, 2005 12:38

bon voilà, j'ai netoyé mon code et tout et tout
et puis comme vous le savez (ou pas) le script n'est pas infaible ;)
Code: Tout sélectionner
<?php
/*
Auteur : Alaa-eddine KADDOURI (alaa.eddine[AT]gmail[d0T]com)
Ce script est inspiré du travail de Ladislav Soukup, [root@soundboss.cz]
(pour pas réecrire toute la partie qui fait le watermark, l'encodage ...etc :p)
///////////////////////////////////////////////////////////////
// ** Licence
// ce script est soumis à la licence gnu GPL ...etc ..etc je le connais pas par coeur
// mais vous connaissez la signification ... enfin j'espère
//
// Si vous utilisez ce scipt vous devez tout d'abord m'écrire un mail et choisir une option:
// - m'envoyer 2000euros pour m'acheter une nouvelle machine (je vous contacterez mon addresse :) )
// - faire un ptit lien vers ma page perso http://www.wonderworlds.net
///////////////////////////////////////////////////////////////


///////////////////////////////////////////////////////////////
** Utilisation

Tout d'abord il faut désactiver le cache de la page avec les meta tags ...etc (consulter la partie failles connues)

puis en haut de votre page ajoutez
<?
session_start();
?>
...<votre code html ici>...
<?
$_SESSION["img_path"]="rep/dans/lequel/se/trouve/l'image/";
$_SESSION["img"]="nom_de_votre_image";
?>
<img src="bg.php" />

...<suite de votre code html ici>...

pour leurrer un peut les utilisateurs novices, vous pouvez par exemple
afficher la vrai image (bg.php) en arrière plan d'un objet, et afficher dessus
une image transparante.

///////////////////////////////////////////////////////////////
** failles connues

* ce script n'est pas parfait (héé oui) mais on peut dire qu'il protège
de 99% des tentatives voir plus et voici une liste des failles découvertes à ce jours (merci à tout les webmasters de WRI)

  - l'image peut etre récuperrer pendant un certain moment à partir du cache Internet explorer (car ce stupide navigateur ne respecte pas les entete no-cache ..etc)
  - les images peuvent etre récuperrés à l'aide du plugin webdevelopper de firefox
  - les images peuvent etre récuperré avec l'utilisation de la librairie curl (cf manuel php) (c'est la faille que je ne pourrai jamais corriger à mon avis)
  - le print screen, toute fois vous pouvez utilise ce petit script pour l'éviter (marche sous IE seulement): 
      entre <head></head> ajouteé
            function ccb(){
            if(clipboardData){
            clipboardData.clearData();
            }}
            setInterval("ccb();", 20);

     puis :
           <body onLoad="ccb()">

   Attention, ce script empeche les utilisateur de faire les copier/coller aussi tan que la page contenant ce script est ouverte
   
vos remarques suggestions etc sont les bienvenus (alaa.eddine[AT]gmail[d0T]com)
///////////////////////////////////////////////////////////////////////////////
*/



/*Configuration*/
session_start();
$image_quality="100";
$image_path=$_SESSION["img_path"];
$logo_path="./logo.png";
$logo_pos_x="right";
$logo_pos_y="top";

// si l'image est introuvable on affiche ce texte
$error_not_found="Ouuups!!!";

global $Copyrights;
$Copyrights="Copyright tfosorcim à l'envers :p";

$error_not_supported="ce format d'image n'est pas supporté";


// couleur d'arrière plan de l'image generré en cas d'erreur
$error_bg_color=array(255,255,255);
// couleur du text
$error_text_color=array(255,0,0);



/*Rien à voir en bas de cette ligne*/
///////////////////////////////////////////////////////////////////////////////////////////////////////

function NewImage($width,$height,$text=""){
   global $error_bg_color,$error_text_color;
   if (function_exists("imagecreatetruecolor")){
      if (!@$img=imagecreatetruecolor($width,$height)){
         $img=imagecreate($width,$height);
      }
   } else {
      $img=imagecreate($width,$height);
   }
   $imgbgcolor=ImageColorAllocate($img,$error_bg_color[0],$error_bg_color[1],$error_bg_color[2]);
   $imgtextcolor=ImageColorAllocate($img,$error_text_color[0],$error_text_color[1],$error_text_color[2]);
   imagefilledrectangle($img,0,0,$width,$height,$imgbgcolor);
   imagestring($img,5,10,10,$text,$imgtextcolor);
   imagestring($img,5,10,30,"Copyright OujdaCity", 0);
   return($img);
}
header("Content-type: image/jpeg");

// Date du passé
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");

// toujours modifié
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");

// HTTP/1.1
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Cache-Control : max-age=A1");
// HTTP/1.0
header("Pragma: no-cache");


$rep_from=array("./","../");
$rep_to=array("","",);

$_GET["img"]=str_replace($rep_from,$rep_to,$_SESSION["img"]);

$file=$image_path . $_GET["img"];
if (file_exists($file) && strcmp($_SESSION["generated"], "true") ){
   $info=getimagesize($file);
   $width=$info[0];
   $height=$info[1];
   if ($info[2]==1){
      $img=@imagecreatefromgif($file);
   } else if ($info[2]==2){
      $img=@imagecreatefromjpeg($file);
   } else if ($info[2]==3){
      $img=@imagecreatefrompng($file);
   } else {
      $width=640;
      $height=480;
      $img=NewImage($width,$height,$error_not_supported);
   }
} else {
   $width=640;
   $height=480;
   $img=NewImage($width,$height,$error_not_found);
}
if (file_exists($logo_path)){
   $info=getimagesize($logo_path);
   $logo_width=$info[0];
   $logo_height=$info[1];
   if ($info[2]==1){
      $img_logo=imagecreatefromgif($logo_path);
   } else if ($info[2]==2){
      $img_logo=imagecreatefromjpeg($logo_path);
   } else if ($info[2]==3){
      $img_logo=imagecreatefrompng($logo_path);
   } else {
      $logo_width=120;
      $logo_height=20;
      $img=NewImage($logo_width,$logo_height,$error_not_supported);
   }
   // positioning - X
   if ($logo_pos_x=="left"){
      $dst_x=10;
   } else if ($logo_pos_x=="center"){
      $dst_x=round(($width-$logo_width)/2);
   } else if ($logo_pos_x=="right"){
      $dst_x=$width-10-$logo_width;
   } else {
      $dst_x=round(($width-$logo_width)/2);
   }
   // positioning - Y
   if ($logo_pos_y=="top"){
      $dst_y=5;
   } else if ($logo_pos_y=="middle"){
      $dst_y=round(($height-($logo_height/2))/2);
   } else if ($logo_pos_y=="bottom"){
      $dst_y=$height-5-$logo_height;
   } else {
      $dst_y=round(($height-($logo_height/2))/2);
   }
   imagecopy($img,$img_logo,$dst_x,$dst_y,0,0,$logo_width,$logo_height);
}



session_write_close();
ImageJpeg($img,"",$image_quality);
?>




donc voilà, si vous avez des remarques ou des améliorations possible n'hésitez surtout pas


aladdin
WRInaute passionné
WRInaute passionné
 
Messages: 925
Inscription: Ven Avr 29, 2005 12:26

Message le Mar Mai 10, 2005 13:09

heuuu .... je me suis peut etre trompé sur le titre ... il etait pas si attendu que ça :lol:

allez y dites moi qu'il pue mon code :cry: ....


MAIS REAGISSEZ KOA :evil:

Jderamaix
WRInaute impliqué
WRInaute impliqué
 
Messages: 291
Inscription: Mar Fév 15, 2005 17:33

Message le Mar Mai 10, 2005 13:14

T'as une page où on peut voir ce script en action ?

++

Jderamaix
WRInaute impliqué
WRInaute impliqué
 
Messages: 291
Inscription: Mar Fév 15, 2005 17:33

Message le Mar Mai 10, 2005 13:19

Ah tiens, sinon, un méthode qu'elle marche bien avec des gens qui ne connaissent pas trop le web (et qui est bonne pour le référencement) :

Code: Tout sélectionner
<h1><span>Descriptif de l'image</span></h1>


dans ta feuille de style :
Code: Tout sélectionner
h1 {width:XXXpx; height:ZZZpx; background:transparent url(/dossier/image.jpg) no-repeat top left;}
h1 span {display:none;}


C'est moins chiant qu'un script anti click droit et je t'assure que 80% des gens ne sauront pas la récupérer.

En plus tu optimises tes mots clé d'image :)

++


aladdin
WRInaute passionné
WRInaute passionné
 
Messages: 925
Inscription: Ven Avr 29, 2005 12:26

Message le Mar Mai 10, 2005 13:21

c'est pas un script anti click droit que je présente là ;)
le code source reste claire, mais on ne peut pas récuperrer l'image meme si on tape son url dans le navigateur ;)



pour un petit aperçu vas ici http://www.oujdacity.net/pt, affiche une image en grand puis essai de la récuperrer ;)

RémyT
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 111
Inscription: Mar Mar 22, 2005 1:50

Message le Mar Mai 10, 2005 13:34

En effet ça marche bien... mais c'est un peu trop compliqué pour moi et puis un imprim écran et l'affaire est réglée...

Jderamaix
WRInaute impliqué
WRInaute impliqué
 
Messages: 291
Inscription: Mar Fév 15, 2005 17:33

Message le Mar Mai 10, 2005 13:36

En fait, y a 3 choses :

1- tu empêches la mise en cache.

2- tu empêches la fonction "enregistrer sous" en disposant une image transparente avec un z-index supérieur

3- tu fais un script serveur pour empêcher le téléchargement direct.

C'est pas mal

++

Erazor
WRInaute accro
WRInaute accro
 
Messages: 5166
Inscription: Sam Fév 14, 2004 10:36

Message le Mar Mai 10, 2005 13:37

l'imprime écran fonctionne toujours ...


aladdin
WRInaute passionné
WRInaute passionné
 
Messages: 925
Inscription: Ven Avr 29, 2005 12:26

Message le Mar Mai 10, 2005 13:55

pour empecher le impr écrant il faut faire ça (marche sous IE seulement) :
ce code
Code: Tout sélectionner
function ccb(){
            if(clipboardData){
            clipboardData.clearData();
            }}
            setInterval("ccb();", 20);


dans le head

puis dans body
Code: Tout sélectionner
<body onload="cbb()">
     ...


mais ça marche qu'avec IE, et qu'avec le impr écran (pas avec les autres logiciels de capture)


herveG
Modérateur
Modérateur
 
Messages: 9838
Inscription: Mer Mar 05, 2003 11:33

Message le Mar Mai 10, 2005 14:03

Question : en empêchant la mise en cache, est ce que cela a des répercussions sur le réf ?


gorgu
WRInaute impliqué
WRInaute impliqué
 
Messages: 347
Inscription: Mer Mar 23, 2005 2:36

Message le Mar Mai 10, 2005 14:52

firefox copie colle comme si de rien n'etait...


aladdin
WRInaute passionné
WRInaute passionné
 
Messages: 925
Inscription: Ven Avr 29, 2005 12:26

Message le Mar Mai 10, 2005 15:09

herveG a écrit:Question : en empêchant la mise en cache, est ce que cela a des répercussions sur le réf ?



la mise en cache dont je parle ici et celle du navigateur, donc coté client, donc elle n'a aucune répercution sur le réferencement

cedfr
WRInaute accro
WRInaute accro
 
Messages: 1314
Inscription: Jeu Juin 24, 2004 10:27

Message le Mar Mai 10, 2005 16:17

Je dit merci pour ce travail :P
Et je te tire mon chapeau :lol:

M.o.n.d.i.a.n.i
WRInaute impliqué
WRInaute impliqué
 
Messages: 317
Inscription: Sam Juil 09, 2005 20:41

Message le Sam Sep 03, 2005 13:53

C'est bien mais... et le referencement dans tout ça?

Si tu as une galerie de photos avec le meme nom et quasi tout le temps les memes dimensions -> duplicate content - meme en generant des alt differents ca risque d'etre chaud

En plus si tu ouvres une session tous tes liens auront des ids de sessions ce qui va decourager le moteur pour indexer ton site (cette partie là est facile à corriger mais pas la premiere)


Formation recommandée sur ce thème :

Formation Google Analytics : en 2 jours, apprenez comment exploiter l'essentiel des possibilités de l'outil de mesure d'audience de Google. Formation animée par Julien Coquet, expert certifié officiellement par Google Analytics.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité