Hallo Oliver,
ich glaube, das wird nicht so funktionieren, wie ich es mir vorstelle!
Vermutlich sind weitere Einzelheiten nötig, damit man versteht, wo sich das Problem entwickelt.
Wir kennen alle das Problem, dass Seiten durchforstet werden auf der Suche nach Mailadressen.
Ich möchte dem mit einem Script begegnen, welches mir in der ersten Funktion eine Grafik ausgibt, auf der die Mailadresse zu sehen ist. Die Grafik wird mit GD generiert und es wird die gleiche Schriftart verwendet, die auch auf der Website zum Einsatz kommt, sodass kein Unterschied zwischen Text und Grafik bemerkt wird. Außerdem wird die Mailadresse mit AES verschlüsselt in einem Link versteckt.
Die zweite Funktion des Scripts entschlüsselt wiederum die Mailadresse und erzeugt einen Redirect an das Mailprogramm.
Der Code ist wie folgt:
Code: Alles auswählen
/*
* Übergabeparameter Bilderzeugung:
* mailadress = mail@xyz.de
* fontsize = 16
* [border] = 4
*
* Übergabeparameter Adressumleitung
* linkto = Verschlüsselte Mailadresse
*/
//-------- CONFIG --------//
$font_file = "/assets/fonts/Play-Regular.ttf";
$cryptkey = "3ad04b7ef03a0c8324d23051cef037fd";
//------- PROGRAMM -------//
// Allgemeine Verschlüsselungsparameter setzen
$ckey = pack('H*', $cryptkey);
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
// TEIL 1: verlinktes Bild generieren
if(isset($_GET["mailaddress"]) && isset($_GET["fontsize"]))
{
// Mailadresse verschlüsseln
$mailaddress = filter_input(INPUT_GET,"mailaddress",FILTER_VALIDATE_EMAIL);
$ma_cr = base64_encode($iv.mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $ckey,$mailaddress, MCRYPT_MODE_CBC, $iv));
// Schriftgröße setzen
$fsize_px = filter_input(INPUT_GET,"fontsize",FILTER_VALIDATE_INT);
$fontsize = $fsize_px*0.75;
// Abstand zum Rand (Rahmen) setzen
$border = 4;
if(isset($_GET["border"]))
{
$border=filter_input(INPUT_GET,"border",FILTER_VALIDATE_INT);
}
// Transparentes Grundbild erstellen in Größe 2000x150px
$SRCPNG = base64_decode("iVBORw0KGgoAAAANSUhEUgAAB9AAAACWAQMAAAC8UIHFAAAAA1BMVEX///+nxBvIAAAAAXRSTlMAQObYZgAAADpJREFUeF7twAEBAAAAgqD+r26IsBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOkxIAAcNurA4AAAAASUVORK5CYII=");
$img = imagecreatefromstring($SRCPNG);
// Anti Aliasing abschalten
imageantialias($img, false);
// Farben setzen
$text_color = ImageColorAllocate($img, 0, 33, 59);
$background_color = imagecolorat($img, 1, 1);
// Text auf das Bild schreiben
imagefttext($img, 12, 0, $border, $border+$fsize_px, $text_color, $font_file, $mailaddress);
// Durch Schrift bedeckten Bereich erkennen und das Bild automatisch auf die Randmaße zuschneiden
$sheight=$fsize_px+(2*$border)+100;
$xpos=0;
$ypos=0;
$height=0;
$width=0;
$left=2000;
$top=200;
$right=0;
$bottom=0;
for($y=$border;$y<$sheight;$y++)
{
for($x=$border;$x<2000;$x++)
{
if(imagecolorat($img,$x,$y)!=$background_color)
{
if($x>$right)$right=$x;
if($y>$bottom)$bottom=$y;
if($x<$left)$left=$x;
if($y<$top)$top=$y;
}
}
}
$xpos=$left-$border;
$ypos=$top-$border;
$width=$right-$left+(2*$border)+1;
$height=$bottom-$top+(2*$border)+1;
$crop_s=array('x' => $xpos , 'y' => $ypos, 'width' => $width, 'height'=> $height);
$img = imagecrop ($img , $crop_s);
// Bild in den Ausgabepuffer schreiben
imagesavealpha($img, true);
ImagePNG($img);
imagedestroy($img);
// Ausgabepuffer in einen String laden und Base64-Codirt in IMG-Tag ausgeben
$imagestring = ob_get_contents(); // read from buffer
ob_end_clean(); // delete buffer
echo '<a href="#" onclick="window.location.href=\'/toimg.php?linkto='.rawurlencode($ma_cr).'\'"><img src="data:image/png;base64,'.base64_encode($imagestring).'" /></a>';
}
// TEIL 2: Link entschlüsseln und per Redirect weiterleiten an das Mailprogramm
elseif(isset($_GET["linkto"]))
{
$link=rawurldecode($_GET["linkto"]);
$cdec = base64_decode($link);
$ma_dec=mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $ckey, substr($cdec,$iv_size), MCRYPT_MODE_CBC, substr($cdec, 0, $iv_size));
header("Location: mailto:".$ma_dec);
}
Ich habe vorhin auch mal kurz getestet, ob es über ein zusätzliches Template laufen würde, aber es gibt gleich mehrere Probleme. Zum einen werden von Redaxo bereits vorab Headerinformationen gesendet. Da weiß ich nicht, wie kritisch das ist. Vermutlich würde es trotzdem laufen. Viel kritischer ist aber, dass ich auch auf die Schriftartendatei zugreifen muss. Und da habe ich wieder das gleiche Problem wie zuvor.
Es muss doch eine Möglichkeit geben, aus einem Template auf zusätzliche Dateien zuzugreifen, oder aber zusätzliche Dateien in die gleiche Umgebung zu laden, sodass darauf zugegriffen werden kann.
LG Sebastian