Jörg Reinholz: Spamfilter für Formulare

Beitrag lesen

iFQMD4 (a h_ref =" h_ttp ://zaqeueubgmgz.com/")zaqeueubgmgz(/a), [ u_rl = h_ttp ://kelmhczioxwv.com/]kelmhczioxwv[/ u_rl ], [link= h_ttp ://dleqdithfhmj.com/]dleqdithfhmj[/link], h_ttp ://spbyhxosumkj.com/"

  
  
Gespammt wird, um Geld zu verdienen. Das gilt auch dann, wenn versucht wird Viren oder Trojaner zu verbreiten. Gibt es die Domains nicht, so gehe einfach davon aus, dass deren Namen Strings sind, nach denen später mit Google & Co. gesucht wird. Dann sammelt jemand Adressen, die er später an Kriminelle verkaufen kann.  
  
Hier meine aktuelle Version des Spamfilters für Mail- und sonstige Formulare:  
  
  
<?php  
function ftx_is_spam($str) {  
  
  # Muster: Eintrag beginnt mit Link:  
  $arMuster[]='^http:\/\/';  
  $arMuster[]='^<a href';  
  $arMuster[]='^\[url=';  
  #3 Links:  
  $arMuster[]='http:\/\/.*http:\/\/.*http:\/\/';  
	  
  #5 Sonderzeichen aufeinander  
  $arMuster[]='&#[0-9A-F]{2,3};&#[0-9A-F]{2,3};&#[0-9A-F]{2,3};&#[0-9A-F]{2,3};&#[0-9A-F]{2,3};';  
	  
  #Spam-Begriffe  
  $arMuster[]='tramadol]';  
  $arMuster[]='viagra';  
  $arMuster[]='cialis';  
  $arMuster[]='prozac';  
  $arMuster[]='pharmacy';  
  $arMuster[]='fluotextine';  
  $arMuster[]='charts';  
  $arMuster[]='investing';  
  $arMuster[]='cheap';  
  $arMuster[]='sacher[- ]finanz';  
  $arMuster[]='thepowerlevel.com';  
  $arMuster[]='well-racking.com';  
  $arMuster[]='hcracking.com';  
  $arMuster[]='doxyciline';  
  $arMuster[]='investment';  
  $arMuster[]='trading';  
  $arMuster[]='profit';  
  $arMuster[]='dollars';  
  $arMuster[]='farming';  
  $arMuster[]='watches';  
  $arMuster[]='replica';  
  $arMuster[]='gucci';  
  $arMuster[]='click here';  
  
  ####### excec! #################  
  
  $replace['i']='########I#######';  
  $replace['l']='########I#######';  
  $replace['o']='########O#######';  
  $replace['a']='########A#######';  
  $replace['c']='########C#######';  
  $replace['z']='########C#######';  
  
  $replace['########I#######']='[il1]';  
  $replace['########O#######']='[o0]';  
  $replace['########A#######']='[a@]';  
  $replace['########C#######']='[czxs]';  
	  
  $str=trim(strtolower($str));  
  $arKeys=array_keys($replace);  
	  
  foreach ($arMuster as $strMuster) {  
    foreach ($arKeys as $key) {  
      $strMuster=str_replace($key, $replace[$key], $strMuster);  
    }  
    if (preg_match('/'.$strMuster.'/',  $str)) {  
      ftx_SpamdetectDie();  
      return true;  
    }  
  }  
  return false;  
  }  
  
function ftx_SpamdetectDie() {  
  header("HTTP/1.0 403 Forbidden",true,403);  
  die('  
<html style="margin:20%">  
  <h1>Spam erkannt!</h1>  
  <p>Falls Sie nicht zu spammen versuchten: Gehen Sie zur&uuml;ck gegen Sie weniger Urls ein, vermeiden Sie Begriffe wie Viagra etc.<p>  
  <p><a href="http://translate.google.de/#de/en/Spam%20erkannt!%0A%0AFalls%20Sie%20nicht%20zu%20spammen%20versuchten%3A%20Gehen%20Sie%20zur%C3%BCck%20gegen%20Sie%20weniger%20Urls%20ein%2C%20vermeiden%20Sie%20Begriffe%20wie%20viagra%20etc.">Translate this for me.</a></a>  
</html>  
  ');  
}  
  
/*  
#Test:  
$str='gtlhmgbtujy, <a href="http://www.fuclgkbbnh.com">iqjfunnsej</a> , [url=http://www.kvhpydjclx.com]tqgiacfovj[/url], http://www.bsgnbtiyhn.com iqjfunnsej, http://www.bsgnbtiyhn.com iqjfunnsej';  
#$str='Kaufen Sie Vi@gr@!';  
#$str='http://kkkk  http://gghjgh  http://liliul';  
#$str='<a href="http://bigzgzgjzg">bigzgzgjzg</a>';  
#$str='&#01;&#01;&#01;&#01;&#01;&#01;&#01;&#01;&#01;&#01;&#01;&#01;&#01;&#01;&#01;';  
  
echo ftx_is_spam($str);  
*/  

Der Spamfilter ist gewiss weder toll noch schön - er funktioniert aber.

Ansonsten ist es noch hilfreich Suchmaschinen mitzuteilen, das es unerwünscht ist, Webseiten mit Mailformularen anzubieten. Man kann auch den Zugriff für Crawler in der robots.txt verbitten.

Dabei aber keineswegs die Adresse konkret benennen, sonst macht man sie den Crawlern des Packs ja erst schmackhaft:

Disallow: /konta*

(matcht kontakt.php kontakt.html ...)

Jörg Reinholz