Seite 1 von 1

Spamvermeidung durch Grafik in der E-Mail-Addi

Verfasst: Mo 3. Sep 2007, 14:02
von Superholgi
Hallo auch,

hat jemand eine Ahnung und kann mir vielleicht dabei helfen, wie ich die E-Mail-Addys auf der Homepage sicherer gestalten kann. Folgende Anweisung wurde mir zugetragen, ich weiss aber nicht, ob diese sich so umsetzen lässt in Contenido:

Damit die Versender von Spam gar nicht erst an unsere E-Mail-Adressen gelangen können, sind diese geschützt, d.h. sie stehen nur als Grafik, aber nicht als Text im Internet. Für die Adress-Sammelprogramme (sog. Harvester), die die Spam-Versender einsetzen, wird es damit unmöglich, die E-Mail-Adressen auf unseren Seiten zu finden.

Zu diesem Zweck sieht der HTML-Quelltext für eine E-Mail-Adresse auf unseren Seiten so aus:
<span class="emaillinks" onclick="abdiepost('abtei@k')">abtei<img src="../bilder/bildpost.gif" alt=" "at" koenigsmuenster.de" class="emailbild" /></span>

Dieser Quelltext erzeugt folgendes Bild:
abtei "at" koenigsmuenster.de

Nur das Wort "abtei" erscheint dabei im Klartext, der Rest der E-Mail-Adresse befindet sich in der Grafik bildpost.gif.
Damit bei einem Klick auf die Adresse das E-Mail-Programm gestartet werden kann, wird das kleine Java-Script abdiepost mit dem onclick-Ereignis verbunden. Dieses Script lautet wie folgt:
function abdiepost(empfaenger) {window.location = "mailto:" + empfaenger + "oenigsmuenster.de"; }

Die beiden Klassen emaillinks und emailbild haben den Zweck, dafür zu sorgen, dass Schrift und Grafik auf einer Linie liegen, und dass der Mauszeiger zu einer Hand wird, wenn die Maus sich über der Adresse befindet. Sie sind so definiert:
.emailbild {
vertical-align:text-top;
}
.emaillinks {
cursor:pointer; }


Wäre schön, wenn mir jemand was dazu sagen könnte. Übrigens, die Informationen habe ich von der Seite koenigsmuenster.de, eine hübsche Seite, weiss aber nicht mit welchem Systen gemacht...

Gruß!

Verfasst: Mo 3. Sep 2007, 14:17
von kummer
am einfachsten vermeidest du spam, in dem du gar keine email-adressen anzeigst, sondern ein kontaktformular verwendest.

Verfasst: Mo 3. Sep 2007, 14:36
von Superholgi
kummer hat geschrieben:am einfachsten vermeidest du spam, in dem du gar keine email-adressen anzeigst, sondern ein kontaktformular verwendest.
Hilft aber nichts, wenn ich E-Mail-Adressen einstellen muss. Mein Chef will das so, wie Chefs eben so mal sind...

Verfasst: Mo 3. Sep 2007, 18:15
von HerrB
Ich verwende ein Modul, welches im Edit-Modus das normale Eingabefeld enthält und sonst eine spezielle Grafik erzeugt:

Code: Alles auswählen

<?php 
if ($edit)
{
   echo "CMS_HTML[4]";
} else {
   $sEMail = "CMS_HTML[4]";
   if ($sEMail <> "" && $sEMail <> "&nbsp;")
   {
      if (is_int(strpos($sEMail, '@')))
      {
          echo '<img src="includes/make_img_light.php?idart='.$idart.'&lang='.$lang.'&typeid=4" border="0">'."\n";
      } else {
          echo $sEMail . "\n";
      }
   }
   else
      echo "&nbsp;", chr(10);
}
?>
Dazu gehört diese make_img_light.php im incluces-Verzeichnis:

Code: Alles auswählen

<?php
include ('../../../contenido/includes/startup.php');
include ('../../../contenido/includes/cfg_sql.inc.php');

$_GET["idart"]   = (int)$_GET["idart"];
$_GET["lang"]    = (int)$_GET["lang"];
$_GET["typeid"] = (int)$_GET["typeid"];

// $circles = 5;
// $width   = 100;
// $height  = 40;
$font    = 3;
$db      = new DB_Contenido;

$sql = "SELECT Content.Value AS Value FROM con_content AS Content, ".$cfg["tab"]["art_lang"]." AS Article
        WHERE Article.idart=".$_GET["idart"]." AND Article.idlang=".$_GET["lang"]." AND Article.idartlang=Content.idartlang
        AND Content.idtype=2 AND Content.typeid=".$_GET["typeid"] ;

$db->query($sql);
if ($db->num_rows() > 0)
{
   $db->next_record();
   $email = strip_tags(urldecode($db->f("Value")));

   if ($email <> "" && $email <> "&nbsp;")
   {
      // $fontwidth = ImageFontWidth($font) * strlen($email);
      // $fontheight = ImageFontHeight($font);

      $fontTTF = '<serverpath to truetype ttf font file, e.g. /htdocs/cms/includes/verdana.ttf>';
      $tsize = ImageTTFBBox (10, 0, $fontTTF, $email);
      $fontwidth = abs($tsize[2] - $tsize[0]);
      //$fontheight = abs($tsize[5] - $tsize[3]);
      $fontheight = 12;

      // $im = @imagecreate ($width,$height);
      $im = @ImageCreate ($fontwidth + 10, $fontheight + 2);
      // $im = ImageCreateTrueColor ($fontwidth + 2,$fontheight + 2); // erst ab GD V2.x
      $background_color = imagecolorallocate ($im, 255, 255, 255);
      // $text_color = imagecolorallocate ($im, rand(0,100), rand(0,100), rand(0,100)); // Random Text
      $text_color = imagecolorallocate ($im, 0, 0, 0);
      // ImageAlphaBlending($im, false);
      // ImageFilledRectangle($im,0,0,$fontwidth + 2,$fontheight + 2,$background_color); // Hintergrund weiss, nur für TrueColor-Bilder

      // for ($i=1;$i<=$circles;$i++) {
      //   $randomcolor = imagecolorallocate ($im , rand(100,255),
      //   rand(100,255),rand(100,255));
      //   imagefilledellipse($im,rand(0,$width-10),rand(0,$height-3),
      //   rand(20,70),rand(20,70),$randomcolor);
      // }
 
      // imagerectangle($im,0,0,$width-1,$height-1,$text_color);
      // imagestring ($im, $font, rand(3, $width-$fontwidth-3),rand(2,$height-$fontheight-3), $email, $text_color);
      // imagestring ($im, $font, 1, 1,  $email, $text_color);
      
      ImageTTFText ($im, 10, 0, 1, $fontheight - 1, $text_color, $fontTTF, $email);
      header ("Content-type: image/jpeg");
      imagejpeg ($im,"",80);
      // header ("Content-type: image/png");
      // imagePNG ($im);
      imageDestroy;
   }
}
?>
Ist ein wenig geklebt und in dieser Form noch nicht getestet. Die auskommentierten Teile kann man aktivieren, wenn man gd2/trueColor-Grafiken erzeugen möchte (dann wird die Grafik hübscher). Bitte das Anpassen des Pfads zur ttf-Datei nicht vergessen - und natürlich eine ttf-Datei hochladen (z.B. verdana.ttf).

Wenns nicht klappt: Erst selber fummeln, habe gerade nicht so die Zeit... :wink:

Viel Erfolg.

Gruß
HerrB