code.fastix.org

Dateiansicht:

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