Michael W.: Datei -> Speichern unter ... blockieren

Beitrag lesen

es gibt eine möglichkeit den broswer-chache zu deaktivieren !
mit php (auszug von dr web)

<?php

session_start();

// Cache deaktivieren
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") ." GMT");
header("Pragma: no-cache");
header("Cache-Control: no-store, no-cache, max-age=0, must-revalidate");

// Challenge-ID
mt_srand((double)microtime()*1000000);

$random = mt_rand();
$random = md5(uniqid($random,TRUE));

$sess_challenge_id = $random;

if(!session_is_registered("sess_challenge_id")):
  session_register("sess_challenge_id");
endif;

// Grafik auslesen
$pic    = "tolle-grafik.jpg";
$img    = @GetImageSize("/absoluter/pfad/zu/verzeichniss/images/".$pic);
$width  = $img[0];
$height = $img[1];

// HTML-Tabelle anzeigen
printf("<table border="0" cellpadding="0" cellspacing="0" width="%s" height="%s">\n",$width,$height);
print "<tr>\n";
printf("<td width="%s" height="%s" background="read_image.php?img=%s&challenge=%s">",$width,$height,rawurlencode($pic),$sess_challenge_id);
printf("<img border="0" src="blind.gif" width="%s" height="%s">",$width,$height);
print "</td>\n";
print "</tr>\n";
print "</table>\n";

?>

Erklärung:
Als allererstes müssen Sie eine Session starten. Danach deaktivieren Sie sicherheitshalber noch den Cache und erzeugen eine 32 Zeichen lange "Challenge-ID". Solche Challenge-ID's kann man übrigens auch gut verwenden, um beispielsweise Reloads zu erkennen. Diese Challenge-ID registrieren wir als Session-Variable. Nun müssen Sie nur noch mit GetImageSize() die Grösse der Grafik auslesen.

Nun kommt der eigentliche Trick: Anstatt die Grafik direkt einzusetzen, starten wir dagegen ein zweites Script "read_image.php" und hängen als GET-Parameter den Namen der Grafik-Datei und unsere Challenge-ID hinten dran.

3. Grafik auslesen:

Nun benötigen Sie ein zweites Script, um Ihre Grafik aus dem geschützten Verzeichnis auszulesen. Der Quellcode dazu sieht folgendermaßen aus:

<?php

session_start();

// Challenge-ID OK -> Bild anzeigen
if(session_is_registered("sess_challenge_id") and $sess_challenge_id == $challenge):

session_unregister("sess_challenge_id");

$path = "/asoluter/pfad/zu/verzeichniss/images/";
  $img  = rawurldecode($img);
  $read = @GetImageSize($path.$img);
  $type = $read[2];

// Nun bestimmen wir den Datei-Typ, damit wir dem Browser sagen können
  // welcher Grafik-Typ er nun vorgeschmissen bekommt
  switch($type)
    {
    case 1:
      $mime = "image/gif";
    break;
    case 2:
      $mime = "image/jpeg";
    break;
    case 3:
      $mime = "image/png";
    break;
    case 4:
      $mime = "application/x-shockwave-flash";
    break;
    }

// Nun senden wir die Header und lesen mit readfile() unsere
  // Grafik aus und senden diese direkt an den Browser
  header("Content-Type: $mime");
  header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
  header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
  header("Pragma: no-cache");
  header("Cache-Control: no-store, no-cache, max-age=0, must-revalidate");
  readfile($path.$img);

// Unerlaubter Zugriff -> Transparentes GIF *ätsch*
else:
  header("Content-type: image/gif");
  header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
  header("Last-Modified: " . gmdate("D, d M Y H:i:s") ." GMT");
  header("Pragma: no-cache");
  header("Cache-Control: no-store, no-cache, max-age=0, must-revalidate");
  readfile("blind.gif");
endif;

?>

!!!!!