code.fastix.org

Dateiansicht:

Datei:Projekte -> Missbräuchliche Anmeldungen blockieren -> abusers.class.php
md5:c25edc254e53509bd0212bd865333706
sha1:5a300b316acea4c7e6b0fc1ccda135a7942228b1
Download-Link:Download
  1. <?php
  2.  
  3. class abusers {
  4.         private $file = 'abusers.sqlite3';
  5.         private $salt = 'sf476asedfasd';
  6.         private $algo = 'sha256';
  7.         private $dbh;
  8.  
  9.         function __construct () {
  10.                 try {
  11.                         $this->dbh = new PDO(
  12.                                 'sqlite:' . $this->file,
  13.                                 null,
  14.                                 null,
  15.                                 array( PDO::ATTR_PERSISTENT => true )
  16.                                
  17.                         );
  18.                 } catch (PDOException $e) {
  19.                         trigger_error ( 'Verbindung fehlgeschlagen: ' . $e->getMessage(), E_USER_ERROR );
  20.                 }
  21.         }
  22.        
  23.         public function check( $name ) {
  24.                 $entry = $this->hashName ( $name );
  25.                 $sth = $this->dbh->prepare( 'SELECT COUNT(hash) AS count FROM abusers WHERE hash = :entry' );
  26.                 $sth->bindValue( ':entry', $entry, PDO::PARAM_STR );
  27.         $sth->execute();
  28.                 $res = $sth->fetchAll();
  29.                 return 0 < $res[0]['count'];
  30.         }
  31.        
  32.         public function add ( $name ) {
  33.                 $entry =  $this->hashName ( $name );
  34.                 $sql = 'INSERT INTO abusers ( hash ) VALUES ( ' . $this->dbh->quote( $entry ) . ' );';
  35.                 return 1 == $this->dbh->exec( $sql ) ;
  36.         }
  37.        
  38.         public function remove( $name ) {
  39.                 $entry =  $this->hashName ( $name );
  40.                 $sql = 'DELETE FROM abusers WHERE hash = ' . $this->dbh->quote( $entry );
  41.                 return 0 < $this->dbh->exec( $sql );
  42.         }
  43.        
  44.         private function hashName ( $name ) {
  45.  
  46.                 $hashes = [];
  47.                 $name   = strtolower( trim( $name ) );
  48.  
  49.                 if ( '' == $name ) {
  50.                         return false;
  51.                 }
  52.                 $name = preg_replace ( '/\s+/', '_', strtolower( $name ) );
  53.                 $arr = explode( '_', $name );
  54.                 foreach ( $arr as $part ) {
  55.                         $part = filter_var( $part, FILTER_SANITIZE_EMAIL );
  56.                         $part = str_replace( str_split( '^°!#$§%&*"\'*+-=?^`´:;<>(){|}~@.[].' ) , '', $part );
  57.                         $hashes[] = hash( $this->algo, $this->salt . $part, false );
  58.                 }
  59.  
  60.                 sort( $hashes, SORT_STRING );
  61.                 return ( implode(':', $hashes ) );
  62.         }
  63. }