IP Sperre will bei Formular nicht!

anopheles1337

Mitglied
Also,

ziemlich fundamentales Problem.
Ich bin gerade dabei ein Newsletter-Script System zu bauen. Nun bin ich
auf eine Art Sicherheitslücke gestoßen. Was ich vor hatte war das wenn ein
Benutzter die Seite(newsletter.php) ansteuert überpfüft wird ob er bereits unter
der IP Adresse eine Newsletter angefordert hat! Funktioniert ja auch alles super!
Wird sofort umgeleitet, damit er ja nicht nochmal was eintragen kann.

Das Problem ist nun man sehr wohl wieder zurück zum Formular kann, nämlich einfach
mit dem Browser zurück gehen und das ganze System zuspammen kann.

Gibts hierführ einen Ausweg!

-Danke!
 
Ja, in dem du die Überprüfung nicht in das Formular baust, sondern einfach vor dem Abschicken des Newsletter überprüfst, ob die IP bereits einen angefordert hat. Dafür speicherst du am besten einfach timestamp und IP des Benutzers ab und vergleichst damit.
 
Flex hat gesagt.:
Ja, in dem du die Überprüfung nicht in das Formular baust, sondern einfach vor dem Abschicken des Newsletter überprüfst, ob die IP bereits einen angefordert hat. Dafür speicherst du am besten einfach timestamp und IP des Benutzers ab und vergleichst damit.
Wunderbar! Hat alles geklappt!
Vielen Dank!
 
Okay! Meine IP-Sperre spinnt doch!
Folgender Code:
PHP:
include('config.inc.php');

mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS)
        or die(mysql_error());
mysql_select_db(MYSQL_DATABASE)
        or die(mysql_error());
        
    $query = "
        SELECT
                `newsletter`.`ip`
				FROM
                `newsletter`
				";
				
		
		$result = mysql_query($query)
    			or die(mysql_error());
		$row = mysql_fetch_array($result);
		global $ip;
		$ip = getenv("REMOTE_ADDR");
		$stop = '';
		
while( $row = mysql_fetch_array($result) ) {
			
			if ($ip == $row['ip'] ) {
			$stop = 1;
			}
}		
		
function check_email($email) {
if( (preg_match('/(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/', $email)) || (preg_match('/^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/',$email)) ) {
return 1;
}
return 0;
} 

$trueemail = check_email($_POST["email"]);

														
if( !empty($_POST["name"]) && !empty($_POST["email"]) && ($stop==0) && ($trueemail==1) ) {				
		 
		 					$name=$_POST["name"];
							$email=$_POST["email"];
							$datum = date("d.m.Y");
							$ip = getenv("REMOTE_ADDR");

									include('config.inc.php');
                  mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS)
       					  or die(mysql_error());
						      mysql_select_db(MYSQL_DATABASE)
					        or die(mysql_error()); 
					        
					    $sql = "insert newsletter (name, email, datum, ip) values
                          ('$name', '$email', '$datum', '$ip')";
					    mysql_query($sql);
}
if($stop == 1) { echo '<strong><div align=\'center\'><font color="#FF000">Ihre Newsletter wurde 
bereits angefordert!<br>Vielen Dank für ihr Interesse!</font></strong></div>'; }
Dummerweise bekomme ich immer den $stop=1 Text zusehen, obwohl $stop = 1 nur dann gesetzt wird wenn auch eine IP Vorhanden ist. Ich habe da ein Verdacht, dass da die Klammern falsch gesetzt sind!

-Danke nochmals!
 
Zuletzt bearbeitet:
Zurück