IP block Problem

creeashion

Grünschnabel
Hallo zusammen, also wie der Name schon sagt, habe ich ein Problem IP's zu blocken... ich möchte euch gerne den Code Schnippsel von meinem Poll zeigen.

Das ist der Teil umzuschauen ob es schon diese IP gibt oder nicht...

PHP:
// *** Letzte IP-Adresse einlesen und mit aktueller vergleichen ***
  if($lastip_file){
    $fp=@fopen($lastip_file,"r");
    if($fp){
      $lip=trim(fgets($fp,1000));
      fclose($fp);
    }
    if($lip==trim($_SERVER['REMOTE_ADDR']."|".$_SERVER['HTTP_X_FORWARDED_FOR'])) $iperr=true;
  }
  if($iperr){
    echo "<b>Fehler:</b><br>\n";
    echo "Du hast Deine Stimme bereits abgegeben!<br>\n";
    echo "<img src=\"".$space_gif."\" width=1 height=6 border=0><br>\n";
  }else if(!$_POST['vote']){
    echo "<b>Fehler:</b><br>\n";
    echo "Bitte wähle einen Punkt aus!<br>\n";
    echo "<img src=\"".$space_gif."\" width=1 height=6 border=0><br>\n";
  }else{
    $values[$_POST['vote']-1]++;
    $line=implode("|",$values);
    $fp=@fopen($data_file,"w+");
    if($fp){
      flock($fp,2);
      fputs($fp,$line);
      flock($fp,3);
      fclose($fp);
    }
    // *** Letzte IP-Adresse speichern, um eine doppelte Stimmabgabe zu verhindern ***
    if($lastip_file){
      $fp=@fopen($lastip_file,"w+");
      if($fp){
        flock($fp,2);
        fputs($fp,trim($_SERVER['REMOTE_ADDR']."|".$_SERVER['HTTP_X_FORWARDED_FOR']));
        flock($fp,3);
        fclose($fp);
      }
    }
    echo "<b>Danke</b> für Deine Teilnahme!<br>\n";
    echo "<img src=\"".$space_gif."\" width=1 height=6 border=0><br>\n";
    if($show_auto_result) $_GET['action']="result";
  }
}

Vielleicht ist mir was entgangen und habe n ganz dummen Fehler gemacht, vielleicht findet ihr den ja ?

MfG
 

mAu

Erfahrenes Mitglied
Wenn zwischendurch jemand anderes voted, dann schlägt die Prüfung doch bei allen anderen fehl. Meine Idee wäre folgende (ungetestet):
PHP:
$ipTable = 'iplock.txt';
$blocked = false;
$user = $_SERVER['REMOTE_ADDR'] . '|' . $_SERVER['HTTP_X_FORWARDED_FOR'];

$ips = file($ipTable);
foreach($ips as $ip)
{
    if($ip == $user)
    {
        $blocked = true;
        break;
    }
}

if($blocked === true)
{
    echo 'Schon abgestimmt.';
}
else
{
    $fp = fopen($ipTable, 'a+');
    fwrite($fp, $user . chr(13) . chr(10));
    fclose($fp);
}