code.fastix.org

Dateiansicht:

Datei:Projekte -> PHP:Spam-Erkennung für Mail- und Kontaktformulare -> SpamDetector.php
md5:162aa61b260d3c3230ad9b20b1ca181c
sha1:71ae72f7edc31308e67f29ff2e6d0a311f68e7c8
  1. <?php
  2.  
  3. /**
  4. * @author: Jörg Reinholz, fastix WebDesign & Consult, Kassel - http://www.fastix.org/
  5. * @version: 1.0
  6. * @license: https://code.fastix.org/lizenz.php
  7. **/
  8.  
  9. class SpamDetector {
  10.     private $sWortliste     = 'known_spam.txt';
  11.     private $arSpamRegex    = false;
  12.     private $arReplacements = false;
  13.  
  14.     function __construct() {
  15.    
  16.         $this -> sWortliste = __DIR__ . '/' . $this -> sWortliste;
  17.  
  18.         # SpamRegex: Eintrag beginnt mit Link:
  19.  
  20.         $arSpamRegex[] = '^http:\/\/';
  21.         $arSpamRegex[] = '^<a href = ';
  22.         $arSpamRegex[] = '^\[url = ';
  23.  
  24.         #3 Links:
  25.  
  26.         $arSpamRegex[] = 'http:\/\/.*http:\/\/.*http:\/\/';
  27.  
  28.         #5 Sonderzeichen aufeinander:
  29.  
  30.         $arSpamRegex[] = '&#[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};';
  31.  
  32.         #Spam-Begriffe:
  33.  
  34.         $ar = file( $this -> sWortliste );
  35.         foreach ( $ar as $wort ) {
  36.             $wort = trim( $wort );
  37.             if ( '' !==  $wort ) {
  38.                 $arSpamRegex[] = $wort;
  39.             }
  40.         }
  41.         $this -> arSpamRegex = $arSpamRegex;
  42.  
  43.         #Ersetzungen:
  44.  
  45.         $arReplacements['i'] = '########I#######';
  46.         $arReplacements['1'] = '########I#######';
  47.         $arReplacements['l'] = '########I#######';
  48.         $arReplacements['o'] = '########O#######';
  49.         $arReplacements['a'] = '########A#######';
  50.         $arReplacements['c'] = '########C#######';
  51.         $arReplacements['z'] = '########C#######';
  52.  
  53.         $arReplacements['########I#######'] = '[il1]';
  54.         $arReplacements['########O#######'] = '[o0]';
  55.         $arReplacements['########A#######'] = '[a@]';
  56.         $arReplacements['########C#######'] = '[czxs]';
  57.  
  58.         $this -> arReplacements = $arReplacements;
  59.     }
  60.  
  61.     function detect($str) {
  62.  
  63.         $str = trim(strtolower( $str ) );
  64.         $arKeys = array_keys( $this -> arReplacements );
  65.  
  66.         foreach ( $this -> arSpamRegex as $strSpamRegex ) {
  67.             foreach ( $arKeys as $key ) {
  68.                     $strSpamRegex = trim( str_replace( $key, $this -> arReplacements[$key], $strSpamRegex ) );
  69.             }
  70.             if ( preg_match( '#' . str_replace( '#', '\#',  $strSpamRegex ) . '#',  $str ) ) {
  71.                 return true;
  72.             }
  73.         }
  74.         return false;
  75.     }
  76. }
  77.