zurück zur Startseite
  


Zurück XHTMLforum > (X)HTML und CSS > (X)HTML
Seite neu laden Gästebuch braucht SPAM-Schutz

Antwort
 
LinkBack Themen-Optionen Ansicht
  #1 (permalink)  
Alt 16.03.2009, 11:25
Benutzerbild von bodoalbstadt
Rookie
neuer user
Thread-Ersteller
 
Registriert seit: 12.09.2008
Beiträge: 75
bodoalbstadt befindet sich auf einem aufstrebenden Ast
Standard Gästebuch braucht SPAM-Schutz

Hallo,

ich habe ein eigenes kleines, recht einaches, Gästebuch erstellt.
Leider wird es seit ein paar Tagen fast schon im 15 Minuten Takt zugespamt.
Nun habe ich ein Feld eingefügt das leer bleiben muss, aber irgendwie schaffen es die Spammer, dieses zu umgehen, dass es auch leer bleibt.

Hier mal der Quellcode:

Code:
<?php
error_reporting(E_ALL);
ini_set("display_errors",1);

if ( !empty ($_POST['field'])) {

  echo "Vielen Dank!<br><br><br>";
}

elseif ( !empty ($_POST['name']) and !empty ($_POST['eintrag']) and !empty ($_POST['email']) and !empty ($_POST['homepage']) and !empty ($_POST['ort'])  and empty ($_POST['field'])) {

  $daten = '
	<fieldset>
		<legend>
			'.htmlspecialchars($_POST['name'], ENT_QUOTES).' aus '.htmlspecialchars($_POST['ort'], ENT_QUOTES).' 
			<i><a href="mailto:'.htmlspecialchars($_POST['email'], ENT_QUOTES).'"><img src="images/email.gif" alt="'.htmlspecialchars($_POST['email'], ENT_QUOTES).'"></a> 
			<a href="'.htmlspecialchars($_POST['homepage'], ENT_QUOTES).'" target=_blank"><img src="images/homepage.gif" alt="'.htmlspecialchars($_POST['homepage'], ENT_QUOTES).'"></a><br>
			schrieb am '.date('d.m.Y \u\m H:i').' Uhr</i>
		</legend>
		'. nl2br(htmlspecialchars($_POST['eintrag'], ENT_QUOTES)) .'
	</fieldset>
  ';

  $name = $_POST['name'];
  $datenbank = "gaestebuch.dat";
  $target = fopen($datenbank,"r+");
  if ( false===$target && !file_exists($datenbank)) {
    $target = fopen($datenbank,"w+");
  }
  if ( false===$target ) {
    die('Fehler beim Öffnen der Datei');
  }
  $tmp = tmpfile() or die('Fehler beim Erstellen der temporären Datei');
  
  stream_copy_to_stream($target, $tmp);
  fflush($tmp);
  
  if ( 0!==fseek($target, 0, SEEK_SET) || 0!==fseek($tmp, 0, SEEK_SET)) {
    die('Fehler beim Setzen des Dateizeigers');
  }
  
  fwrite($target, $daten);
  stream_copy_to_stream($tmp, $target);
  
  fclose($target);
  fclose($tmp);
  echo "Vielen Dank $name. Ihr Eintrag wurde erfolgreich ausgef&uuml;hrt!<br><br><br>";
}

elseif ( !empty ($_POST['name']) and !empty ($_POST['eintrag']) and !empty ($_POST['email']) and !empty ($_POST['homepage']) and empty ($_POST['ort']) and empty ($_POST['field'])) {

  $daten = '
	<fieldset>
		<legend>
			'.htmlspecialchars($_POST['name'], ENT_QUOTES).' 
			<i><a href="mailto:'.htmlspecialchars($_POST['email'], ENT_QUOTES).'"><img src="images/email.gif" alt="'.htmlspecialchars($_POST['email'], ENT_QUOTES).'"></a> 
			<a href="'.htmlspecialchars($_POST['homepage'], ENT_QUOTES).'" target=_blank"><img src="images/homepage.gif" alt="'.htmlspecialchars($_POST['homepage'], ENT_QUOTES).'"></a><br>
			schrieb am '.date('d.m.Y \u\m H:i').' Uhr</i>
		</legend>
		'. nl2br(htmlspecialchars($_POST['eintrag'], ENT_QUOTES)) .'
	</fieldset>
  ';

  $name = $_POST['name'];
  $datenbank = "gaestebuch.dat";
  $target = fopen($datenbank,"r+");
  if ( false===$target && !file_exists($datenbank)) {
    $target = fopen($datenbank,"w+");
  }
  if ( false===$target ) {
    die('Fehler beim Öffnen der Datei');
  }
  $tmp = tmpfile() or die('Fehler beim Erstellen der temporären Datei');
  
  stream_copy_to_stream($target, $tmp);
  fflush($tmp);
  
  if ( 0!==fseek($target, 0, SEEK_SET) || 0!==fseek($tmp, 0, SEEK_SET)) {
    die('Fehler beim Setzen des Dateizeigers');
  }
  
  fwrite($target, $daten);
  stream_copy_to_stream($tmp, $target);
  
  fclose($target);
  fclose($tmp);
  echo "Vielen Dank $name. Ihr Eintrag wurde erfolgreich ausgef&uuml;hrt!<br><br><br>";
}

elseif ( !empty ($_POST['name']) and !empty ($_POST['eintrag']) and !empty ($_POST['email']) and !empty ($_POST['ort']) and empty ($_POST['homepage']) and empty ($_POST['field'])) {

  $daten = '
	<fieldset>
		<legend>
			'.htmlspecialchars($_POST['name'], ENT_QUOTES).' aus '.htmlspecialchars($_POST['ort'], ENT_QUOTES).' 
			<i><a href="mailto:'.htmlspecialchars($_POST['email'], ENT_QUOTES).'"><img src="images/email.gif" alt="'.htmlspecialchars($_POST['email'], ENT_QUOTES).'"></a><br>
			schrieb am '.date('d.m.Y \u\m H:i').' Uhr</i>
		</legend>
		'. nl2br(htmlspecialchars($_POST['eintrag'], ENT_QUOTES)) .'
	</fieldset>
  ';

  $name = $_POST['name'];
  $datenbank = "gaestebuch.dat";
  $target = fopen($datenbank,"r+");
  if ( false===$target && !file_exists($datenbank)) {
    $target = fopen($datenbank,"w+");
  }
  if ( false===$target ) {
    die('Fehler beim Öffnen der Datei');
  }
  $tmp = tmpfile() or die('Fehler beim Erstellen der temporären Datei');
  
  stream_copy_to_stream($target, $tmp);
  fflush($tmp);
  
  if ( 0!==fseek($target, 0, SEEK_SET) || 0!==fseek($tmp, 0, SEEK_SET)) {
    die('Fehler beim Setzen des Dateizeigers');
  }
  
  fwrite($target, $daten);
  stream_copy_to_stream($tmp, $target);
  
  fclose($target);
  fclose($tmp);
  echo "Vielen Dank $name. Ihr Eintrag wurde erfolgreich ausgef&uuml;hrt!<br><br><br>";
}

elseif ( !empty ($_POST['name']) and !empty ($_POST['eintrag']) and !empty ($_POST['homepage']) and !empty ($_POST['ort']) and empty ($_POST['email']) and empty ($_POST['field'])) {

  $daten = '
	<fieldset>
		<legend>
			'.htmlspecialchars($_POST['name'], ENT_QUOTES).' aus '.htmlspecialchars($_POST['ort'], ENT_QUOTES).' 
			<i><a href="'.htmlspecialchars($_POST['homepage'], ENT_QUOTES).'" target=_blank"><img src="images/homepage.gif" alt="'.htmlspecialchars($_POST['homepage'], ENT_QUOTES).'"></a><br>
			schrieb am '.date('d.m.Y \u\m H:i').' Uhr</i>
		</legend>
		'. nl2br(htmlspecialchars($_POST['eintrag'], ENT_QUOTES)) .'
	</fieldset>
  ';

  $name = $_POST['name'];
  $datenbank = "gaestebuch.dat";
  $target = fopen($datenbank,"r+");
  if ( false===$target && !file_exists($datenbank)) {
    $target = fopen($datenbank,"w+");
  }
  if ( false===$target ) {
    die('Fehler beim Öffnen der Datei');
  }
  $tmp = tmpfile() or die('Fehler beim Erstellen der temporären Datei');
  
  stream_copy_to_stream($target, $tmp);
  fflush($tmp);
  
  if ( 0!==fseek($target, 0, SEEK_SET) || 0!==fseek($tmp, 0, SEEK_SET)) {
    die('Fehler beim Setzen des Dateizeigers');
  }
  
  fwrite($target, $daten);
  stream_copy_to_stream($tmp, $target);
  
  fclose($target);
  fclose($tmp);
  echo "Vielen Dank $name. Ihr Eintrag wurde erfolgreich ausgef&uuml;hrt!<br><br><br>";
}

elseif ( !empty ($_POST['name']) and !empty ($_POST['eintrag']) and !empty ($_POST['ort']) and empty ($_POST['email']) and empty ($_POST['homepage']) and empty ($_POST['field'])) {

  $daten = '
	<fieldset>
		<legend>
			'.htmlspecialchars($_POST['name'], ENT_QUOTES).' aus '.htmlspecialchars($_POST['ort'], ENT_QUOTES).'<br>
			<i>schrieb am '.date('d.m.Y \u\m H:i').' Uhr</i>
		</legend>
		'. nl2br(htmlspecialchars($_POST['eintrag'], ENT_QUOTES)) .'
	</fieldset>
  ';

  $name = $_POST['name'];
  $datenbank = "gaestebuch.dat";
  $target = fopen($datenbank,"r+");
  if ( false===$target && !file_exists($datenbank)) {
    $target = fopen($datenbank,"w+");
  }
  if ( false===$target ) {
    die('Fehler beim Öffnen der Datei');
  }
  $tmp = tmpfile() or die('Fehler beim Erstellen der temporären Datei');
  
  stream_copy_to_stream($target, $tmp);
  fflush($tmp);
  
  if ( 0!==fseek($target, 0, SEEK_SET) || 0!==fseek($tmp, 0, SEEK_SET)) {
    die('Fehler beim Setzen des Dateizeigers');
  }
  
  fwrite($target, $daten);
  stream_copy_to_stream($tmp, $target);
  
  fclose($target);
  fclose($tmp);
  echo "Vielen Dank $name. Ihr Eintrag wurde erfolgreich ausgef&uuml;hrt!<br><br><br>";
}

elseif ( !empty ($_POST['name']) and !empty ($_POST['eintrag']) and !empty ($_POST['email']) and empty ($_POST['ort']) and empty ($_POST['homepage']) and empty ($_POST['field'])) {

  $daten = '
	<fieldset>
		<legend>
			'.htmlspecialchars($_POST['name'], ENT_QUOTES).' 
			<i><a href="mailto:'.htmlspecialchars($_POST['email'], ENT_QUOTES).'"><img src="images/email.gif" alt="'.htmlspecialchars($_POST['email'], ENT_QUOTES).'"></a><br>
			schrieb am '.date('d.m.Y \u\m H:i').' Uhr</i>
		</legend>
		'. nl2br(htmlspecialchars($_POST['eintrag'], ENT_QUOTES)) .'
	</fieldset>
  ';

  $name = $_POST['name'];
  $datenbank = "gaestebuch.dat";
  $target = fopen($datenbank,"r+");
  if ( false===$target && !file_exists($datenbank)) {
    $target = fopen($datenbank,"w+");
  }
  if ( false===$target ) {
    die('Fehler beim Öffnen der Datei');
  }
  $tmp = tmpfile() or die('Fehler beim Erstellen der temporären Datei');
  
  stream_copy_to_stream($target, $tmp);
  fflush($tmp);
  
  if ( 0!==fseek($target, 0, SEEK_SET) || 0!==fseek($tmp, 0, SEEK_SET)) {
    die('Fehler beim Setzen des Dateizeigers');
  }
  
  fwrite($target, $daten);
  stream_copy_to_stream($tmp, $target);
  
  fclose($target);
  fclose($tmp);
  echo "Vielen Dank $name. Ihr Eintrag wurde erfolgreich ausgef&uuml;hrt!<br><br><br>";
}

elseif ( !empty ($_POST['name']) and !empty ($_POST['eintrag']) and !empty ($_POST['homepage']) and empty ($_POST['email']) and empty ($_POST['ort']) and empty ($_POST['field'])) {

  $daten = '
	<fieldset>
		<legend>
			'.htmlspecialchars($_POST['name'], ENT_QUOTES).' 
			<i><a href="'.htmlspecialchars($_POST['homepage'], ENT_QUOTES).'" target=_blank"><img src="images/homepage.gif" alt="'.htmlspecialchars($_POST['homepage'], ENT_QUOTES).'"></a><br>
			schrieb am '.date('d.m.Y \u\m H:i').' Uhr</i>
		</legend>
		'. nl2br(htmlspecialchars($_POST['eintrag'], ENT_QUOTES)) .'
	</fieldset>
  ';

  $name = $_POST['name'];
  $datenbank = "gaestebuch.dat";
  $target = fopen($datenbank,"r+");
  if ( false===$target && !file_exists($datenbank)) {
    $target = fopen($datenbank,"w+");
  }
  if ( false===$target ) {
    die('Fehler beim Öffnen der Datei');
  }
  $tmp = tmpfile() or die('Fehler beim Erstellen der temporären Datei');
  
  stream_copy_to_stream($target, $tmp);
  fflush($tmp);
  
  if ( 0!==fseek($target, 0, SEEK_SET) || 0!==fseek($tmp, 0, SEEK_SET)) {
    die('Fehler beim Setzen des Dateizeigers');
  }
  
  fwrite($target, $daten);
  stream_copy_to_stream($tmp, $target);
  
  fclose($target);
  fclose($tmp);
  echo "Vielen Dank $name. Ihr Eintrag wurde erfolgreich ausgef&uuml;hrt!<br><br><br>";
}

elseif ( !empty ($_POST['name']) and !empty ($_POST['eintrag']) and empty ($_POST['homepage']) and empty ($_POST['email']) and empty ($_POST['ort']) and empty ($_POST['field'])) {

  $daten = '
	<fieldset>
		<legend>
			'.htmlspecialchars($_POST['name'], ENT_QUOTES).' <i>schrieb am '.date('d.m.Y \u\m H:i').' Uhr</i>
		</legend>
		'. nl2br(htmlspecialchars($_POST['eintrag'], ENT_QUOTES)) .'
	</fieldset>
  ';

  $name = $_POST['name'];
  $datenbank = "gaestebuch.dat";
  $target = fopen($datenbank,"r+");
  if ( false===$target && !file_exists($datenbank)) {
    $target = fopen($datenbank,"w+");
  }
  if ( false===$target ) {
    die('Fehler beim Öffnen der Datei');
  }
  $tmp = tmpfile() or die('Fehler beim Erstellen der temporären Datei');
  
  stream_copy_to_stream($target, $tmp);
  fflush($tmp);
  
  if ( 0!==fseek($target, 0, SEEK_SET) || 0!==fseek($tmp, 0, SEEK_SET)) {
    die('Fehler beim Setzen des Dateizeigers');
  }
  
  fwrite($target, $daten);
  stream_copy_to_stream($tmp, $target);
  
  fclose($target);
  fclose($tmp);
  echo "Vielen Dank $name. Ihr Eintrag wurde erfolgreich ausgef&uuml;hrt!<br><br><br>";
}

elseif ( empty ($_POST['name']) and empty ($_POST['eintrag']) and empty ($_POST['homepage']) and empty ($_POST['email']) and empty ($_POST['ort']) and empty ($_POST['field'])) {
}

?>

<p><a href="index.php?p=daten/gaestebuch-eintragen">Ins G&auml;stebuch eintragen!</a></p>

<?php
	$datenbank = "gaestebuch.dat";
	readfile($datenbank);
?>


Code:
    <form method="post" action="index.php?p=daten/gaestebuch">
      <fieldset>
		<legend>Ins G&auml;stebuch eintragen:</legend>
		<p class="small">Wird ein Pflichtfeld nicht ausgef&uuml;llt, findet keine Eintragung in das G&auml;stebuch statt!</p>
		<table>
			<tr>
				<td>Name : * </td>
				<td><input type="text" name="name" /></td>
			</tr>
			<tr>
				<td>Wohnort : </td>
				<td><input type="text" name="ort" /></td>
			</tr>
			<tr>
				<td>E-Mail : </td>
				<td><input type="text" name="email" /></td>
			</tr>
			<tr>
				<td>Homepage <i>(mit http://)</i> : </td>
				<td><input type="text" name="homepage" value="http://" /></td>
			</tr>
			<tr>
				<td>Nicht ausf&uuml;llen : ** </td>
				<td><input type="text" name="field" /></td>
			</tr>
			<tr>
				<td>Kommentar : * </td>
				<td><textarea name="eintrag"></textarea></td>
			</tr>
			<tr>
				<td></td>
				<td><input type="submit" name="button" value="Eintragen" /></td>
			</tr>
		</table>
		<p>* = Pflichtfeld<br />
		** = Dieses Feld bitte nicht ausf&uuml;llen (Spamschutz)</p>
	</fieldset>
    </form>
Ich weiß, ist nicht gerade sehr einfallsreich die Lösung, aber kann mir jemand eine Lösung verraten die ggf. etwas besser ist?
Mit Zitat antworten
Sponsored Links
  #2 (permalink)  
Alt 16.03.2009, 11:58
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 14.03.2007
Ort: Bad Schmiedeberg
Beiträge: 1.395
regloh wird schon bald berühmt werden
Standard

Ich habe - bevor ich auf Wordpress umgestiegen bin - mein Gästebuch mit 2 Regeln geschützt:

- Es durften keine Links enthalten sein bzw. URLs. Man könnte natürlich auch eine max. Anzahl an URLs zulassen. Die meisten Spammer schreiben ja zig Links rein.

- und ich hatte einen Timer eingebaut. Wurde das Formular innerhalb von 10sek ausgefüllt (muss man u.U. etwas anpassen. Hatte mit 3sek angefangen), dann war es mit hoher Wahrscheinlichkeit Spam.

Die als Spam erkannten Einträge habe ich mitgeloggt und geschaut, wie schnell es ausgefüllt wurde. Es variierte sehr stark aber diese 2 Regeln haben das Gästebuch über Wochen spamfrei gehalten.
Mit Zitat antworten
Sponsored Links
  #3 (permalink)  
Alt 16.03.2009, 12:24
Benutzerbild von David
auch, ja!
XHTMLforum-Kenner
 
Registriert seit: 08.11.2007
Beiträge: 2.626
David ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer Anblick
Standard

Die Idee mit dem Extrafeld ist garnicht so dumm.
Es wird effektiver, wenn du ein Script schreibst, welches dieses Feld zufällig generiert und auch zufällig innerhalb des Formulares platziert. Das Feld nennst du dann wie ein normales Feld und schiebst es per CSS aus dem Sichtfeld.

Edit: hier wurde das in einem Kontaktformular umgesetzt:
http://xhtmlforum.de/45301-kontaktfo...rierefrei.html
Das kann man dann ja an das Gästebuch anpassen.
__________________
github | http://dnaber.de

Geändert von David (16.03.2009 um 12:26 Uhr)
Mit Zitat antworten
  #4 (permalink)  
Alt 16.03.2009, 13:12
Benutzerbild von Gumbo
XHTMLforum-Kenner
 
Registriert seit: 22.08.2004
Ort: Trier
Beiträge: 2.733
Gumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekannt
Standard

Du musst wissen, dass solche Spam-Bots nicht immer dumm sein müssen. So können sie etwa eine Reihe von Kombinationen ausprobieren, schauen welche akzeptiert wird und diese für zukünftige Nachrichten verwenden.

Was ich dir empfehle ist erst einmal sicherzustellen, dass der Weg zu einem Eintrag immer über das Formular geht. Damit kannst du schon einmal direkte Angriffe abwenden.
Dazu kannst du beispielsweise einen zufälligen Token zur Authentifizierung des Eintrag erzeugen und diesen zusammen mit dem Eintrag speichern. Absichern kannst du dieses Token dann durch einen Hash mit geheimen Salt:
PHP-Code:
$salt 'geheim';
$token sha1(uniqid(rand()));
echo 
'<input type="hidden" name="auth" value="'.$token.'">';
echo 
'<input type="hidden" name="auth-hash" value="'.sha1($salt.$token).'">'
Auf der Gegenseite prüfst du dann die Authentizität des Tokens:
PHP-Code:
if ($_POST['auth-hash'] == sha1($salt.$_POST['auth'])) {
    
// Token authentisch

Gleichzeitig müsstest du noch prüfen, ob das Token nicht schon verwendet wurde.
__________________
Markus Wulftange
Mit Zitat antworten
  #5 (permalink)  
Alt 16.03.2009, 14:24
Benutzerbild von bodoalbstadt
Rookie
neuer user
Thread-Ersteller
 
Registriert seit: 12.09.2008
Beiträge: 75
bodoalbstadt befindet sich auf einem aufstrebenden Ast
Standard

Also ich hab mich jetzt mal an Captchas versucht, aber irgendwie bekomm ich die nicht einwandfrei zum Laufen. Entweder werden Fehler angezeigt oder es erscheint kein Bildchen. Bei einem Captcha habe ich zwar einwandfrei alles einbinden können, aber das Formular wurde auch bei der Eingabe des richtigen Code nicht abgeschickt.

Ich bin gerade am überlegen, ob nicht ganz einfach eine simple Abfrage reichen dürfte, denn momentan handelt es sich definitiv um einen Spambot und keine echten Personen. Also ich denke da an eine Abfrage wie bspw. "7+3" oder ""Aus wie vielen Buchstaben besteht das Wort 'Max' oder sowas in der Richtung. Nur finde ich momentan nichts darüber, wie man ein Feld nach einem bestimmten Inhalt abfragt. Kann mir da jemand helfen?
Mit Zitat antworten
  #6 (permalink)  
Alt 16.03.2009, 18:00
Benutzerbild von bodoalbstadt
Rookie
neuer user
Thread-Ersteller
 
Registriert seit: 12.09.2008
Beiträge: 75
bodoalbstadt befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von regloh Beitrag anzeigen
Ich habe - bevor ich auf Wordpress umgestiegen bin - mein Gästebuch mit 2 Regeln geschützt:

- Es durften keine Links enthalten sein bzw. URLs. Man könnte natürlich auch eine max. Anzahl an URLs zulassen. Die meisten Spammer schreiben ja zig Links rein.

- und ich hatte einen Timer eingebaut. Wurde das Formular innerhalb von 10sek ausgefüllt (muss man u.U. etwas anpassen. Hatte mit 3sek angefangen), dann war es mit hoher Wahrscheinlichkeit Spam.

Die als Spam erkannten Einträge habe ich mitgeloggt und geschaut, wie schnell es ausgefüllt wurde. Es variierte sehr stark aber diese 2 Regeln haben das Gästebuch über Wochen spamfrei gehalten.

Also was das mit den URL angeht hab ich so gelöst, schon von anfang an, dass überhaupt kein Code funktioniert, also weder HTML noch PHP oder so, sondern dass der gesamte Text in Reintext angezeigt wird, also so, wie er geschrieben und abgeschickt wurde.

Das mit dem Timer bekomm ich irgendwie nicht zum Laufen.
Mit Zitat antworten
  #7 (permalink)  
Alt 16.03.2009, 18:15
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 14.03.2007
Ort: Bad Schmiedeberg
Beiträge: 1.395
regloh wird schon bald berühmt werden
Standard

Zitat:
lso was das mit den URL angeht hab ich so gelöst, schon von anfang an, dass überhaupt kein Code funktioniert, also weder HTML noch PHP oder so, sondern dass der gesamte Text in Reintext angezeigt wird, also so, wie er geschrieben und abgeschickt wurde.
Ich meinte, dass der Text generell kein http:// oder www. enthalten darf. Dass HTML- und PHP-Code gefiltert wird, ist ja klar.

Zitat:
Das mit dem Timer bekomm ich irgendwie nicht zum Laufen.
Du speicherst den Timestamp beim Aufruf der Seite und speicherst ihn in ein verstecktes Feld. Wenn dann auf Abschicken geklickt wird, speicherst du erneut einen Timestamp. Nun subtrahierst du beide und hast die Zeit in Sekunden, die das Ausfüllen des Formulars gedauert hat.
Mit Zitat antworten
  #8 (permalink)  
Alt 16.03.2009, 19:43
Benutzerbild von bodoalbstadt
Rookie
neuer user
Thread-Ersteller
 
Registriert seit: 12.09.2008
Beiträge: 75
bodoalbstadt befindet sich auf einem aufstrebenden Ast
Frage

Ich hab es nun noch einmal mit einem Captcha versucht, aber immer bekomme ich den gleichen Fehler angezeigt, egal welches Captcha, also von welchem Anbieter, ich es verwende.

Zitat:
Parse error: syntax error, unexpected $end in /home/ftp13140760-106678/www/data/daten/gaestebuch.php on line 329
Schmeiß ich die Zeile "session_start();" aus dem Code kommt kein Fehler, dann funktioniert aber auch das Captcha nicht.

Hier nun mal der Code aus den Dateien:

captcha.php
PHP-Code:
<?php 
   session_start
(); 
   unset(
$_SESSION['captcha_spam']); 

   function 
randomString($len) { 
      function 
make_seed(){ 
         list(
$usec $sec) = explode (' 'microtime()); 
         return (float) 
$sec + ((float) $usec 100000); 
      } 
      
srand(make_seed());   
                        
      
//Der String $possible enthält alle Zeichen, die verwendet werden sollen 
      
$possible="ABCDEFGHJKLMNPRSTUVWXYZabcdefghijkmnpqrstuvwxyz23456789"
      
$str=""
      while(
strlen($str)<$len) { 
        
$str.=substr($possible,(rand()%(strlen($possible))),1); 
      } 
   return(
$str); 
   } 

   
$text randomString(5);  //Die Zahl bestimmt die Anzahl stellen 
   
$_SESSION['captcha_spam'] = $text
          
   
header('Content-type: image/png'); 
   
$img ImageCreateFromPNG('images/captcha.png'); //Backgroundimage 
   
$color ImageColorAllocate($img000); //Farbe 
   
$ttf $_SERVER['DOCUMENT_ROOT']."/captcha/XFILES.TTF"//Schriftart 
   
$ttfsize 25//Schriftgrösse 
   
$angle rand(0,5); 
   
$t_x rand(5,30); 
   
$t_y 35
   
imagettftext($img$ttfsize$angle$t_x$t_y$color$ttf$text); 
   
imagepng($img); 
   
imagedestroy($img); 
?>


gaestebuch.php
PHP-Code:
<?php 
session_start
(); 
if(isset(
$_SESSION['captcha_spam']) AND $_POST["sicherheitscode"] == $_SESSION['captcha_spam']){ 
unset(
$_SESSION['captcha_spam']); 

if ( !empty (
$_POST['heissen']) and !empty ($_POST['nachrichtenfield']) and !empty ($_POST['briefe']) and !empty ($_POST['seite']) and !empty ($_POST['wohnen']) ) {

  
$daten '
    <fieldset>
        <legend>
            '
.htmlspecialchars($_POST['heissen'], ENT_QUOTES).' aus '.htmlspecialchars($_POST['wohnen'], ENT_QUOTES).
            <i><a href="mailto:'
.htmlspecialchars($_POST['briefe'], ENT_QUOTES).'"><img src="images/email.gif" alt="'.htmlspecialchars($_POST['briefe'], ENT_QUOTES).'"></a> 
            <a href="'
.htmlspecialchars($_POST['seite'], ENT_QUOTES).'" target=_blank"><img src="images/homepage.gif" alt="'.htmlspecialchars($_POST['seite'], ENT_QUOTES).'"></a><br>
            schrieb am '
.date('d.m.Y \u\m H:i').' Uhr</i>
        </legend>
        '
nl2br(htmlspecialchars($_POST['nachrichtenfield'], ENT_QUOTES)) .'
    </fieldset>
  '
;

  
$heissen $_POST['heissen'];
  
$datenbank "gaestebuch.dat";
  
$target fopen($datenbank,"r+");
  if ( 
false===$target && !file_exists($datenbank)) {
    
$target fopen($datenbank,"w+");
  }
  if ( 
false===$target ) {
    die(
'Fehler beim Öffnen der Datei');
  }
  
$tmp tmpfile() or die('Fehler beim Erstellen der temporären Datei');
  
  
stream_copy_to_stream($target$tmp);
  
fflush($tmp);
  
  if ( 
0!==fseek($target0SEEK_SET) || 0!==fseek($tmp0SEEK_SET)) {
    die(
'Fehler beim Setzen des Dateizeigers');
  }
  
  
fwrite($target$daten);
  
stream_copy_to_stream($tmp$target);
  
  
fclose($target);
  
fclose($tmp);
  echo 
"Vielen Dank $heissen. Ihr Eintrag wurde erfolgreich ausgef&uuml;hrt!<br><br><br>";
}

elseif ( !empty (
$_POST['heissen']) and !empty ($_POST['nachrichtenfield']) and !empty ($_POST['briefe']) and !empty ($_POST['seite']) and empty ($_POST['wohnen'])) {

  
$daten '
    <fieldset>
        <legend>
            '
.htmlspecialchars($_POST['heissen'], ENT_QUOTES).
            <i><a href="mailto:'
.htmlspecialchars($_POST['briefe'], ENT_QUOTES).'"><img src="images/email.gif" alt="'.htmlspecialchars($_POST['briefe'], ENT_QUOTES).'"></a> 
            <a href="'
.htmlspecialchars($_POST['seite'], ENT_QUOTES).'" target=_blank"><img src="images/homepage.gif" alt="'.htmlspecialchars($_POST['seite'], ENT_QUOTES).'"></a><br>
            schrieb am '
.date('d.m.Y \u\m H:i').' Uhr</i>
        </legend>
        '
nl2br(htmlspecialchars($_POST['nachrichtenfield'], ENT_QUOTES)) .'
    </fieldset>
  '
;

  
$heissen $_POST['heissen'];
  
$datenbank "gaestebuch.dat";
  
$target fopen($datenbank,"r+");
  if ( 
false===$target && !file_exists($datenbank)) {
    
$target fopen($datenbank,"w+");
  }
  if ( 
false===$target ) {
    die(
'Fehler beim Öffnen der Datei');
  }
  
$tmp tmpfile() or die('Fehler beim Erstellen der temporären Datei');
  
  
stream_copy_to_stream($target$tmp);
  
fflush($tmp);
  
  if ( 
0!==fseek($target0SEEK_SET) || 0!==fseek($tmp0SEEK_SET)) {
    die(
'Fehler beim Setzen des Dateizeigers');
  }
  
  
fwrite($target$daten);
  
stream_copy_to_stream($tmp$target);
  
  
fclose($target);
  
fclose($tmp);
  echo 
"Vielen Dank $heissen. Ihr Eintrag wurde erfolgreich ausgef&uuml;hrt!<br><br><br>";
}

elseif ( !empty (
$_POST['heissen']) and !empty ($_POST['nachrichtenfield']) and !empty ($_POST['briefe']) and !empty ($_POST['wohnen']) and empty ($_POST['seite']) ) {

  
$daten '
    <fieldset>
        <legend>
            '
.htmlspecialchars($_POST['heissen'], ENT_QUOTES).' aus '.htmlspecialchars($_POST['wohnen'], ENT_QUOTES).
            <i><a href="mailto:'
.htmlspecialchars($_POST['briefe'], ENT_QUOTES).'"><img src="images/email.gif" alt="'.htmlspecialchars($_POST['briefe'], ENT_QUOTES).'"></a><br>
            schrieb am '
.date('d.m.Y \u\m H:i').' Uhr</i>
        </legend>
        '
nl2br(htmlspecialchars($_POST['nachrichtenfield'], ENT_QUOTES)) .'
    </fieldset>
  '
;

  
$heissen $_POST['heissen'];
  
$datenbank "gaestebuch.dat";
  
$target fopen($datenbank,"r+");
  if ( 
false===$target && !file_exists($datenbank)) {
    
$target fopen($datenbank,"w+");
  }
  if ( 
false===$target ) {
    die(
'Fehler beim Öffnen der Datei');
  }
  
$tmp tmpfile() or die('Fehler beim Erstellen der temporären Datei');
  
  
stream_copy_to_stream($target$tmp);
  
fflush($tmp);
  
  if ( 
0!==fseek($target0SEEK_SET) || 0!==fseek($tmp0SEEK_SET)) {
    die(
'Fehler beim Setzen des Dateizeigers');
  }
  
  
fwrite($target$daten);
  
stream_copy_to_stream($tmp$target);
  
  
fclose($target);
  
fclose($tmp);
  echo 
"Vielen Dank $heissen. Ihr Eintrag wurde erfolgreich ausgef&uuml;hrt!<br><br><br>";
}

elseif ( !empty (
$_POST['heissen']) and !empty ($_POST['nachrichtenfield']) and !empty ($_POST['seite']) and !empty ($_POST['wohnen']) and empty ($_POST['briefe']) ) {

  
$daten '
    <fieldset>
        <legend>
            '
.htmlspecialchars($_POST['heissen'], ENT_QUOTES).' aus '.htmlspecialchars($_POST['wohnen'], ENT_QUOTES).
            <i><a href="'
.htmlspecialchars($_POST['seite'], ENT_QUOTES).'" target=_blank"><img src="images/homepage.gif" alt="'.htmlspecialchars($_POST['seite'], ENT_QUOTES).'"></a><br>
            schrieb am '
.date('d.m.Y \u\m H:i').' Uhr</i>
        </legend>
        '
nl2br(htmlspecialchars($_POST['nachrichtenfield'], ENT_QUOTES)) .'
    </fieldset>
  '
;

  
$heissen $_POST['heissen'];
  
$datenbank "gaestebuch.dat";
  
$target fopen($datenbank,"r+");
  if ( 
false===$target && !file_exists($datenbank)) {
    
$target fopen($datenbank,"w+");
  }
  if ( 
false===$target ) {
    die(
'Fehler beim Öffnen der Datei');
  }
  
$tmp tmpfile() or die('Fehler beim Erstellen der temporären Datei');
  
  
stream_copy_to_stream($target$tmp);
  
fflush($tmp);
  
  if ( 
0!==fseek($target0SEEK_SET) || 0!==fseek($tmp0SEEK_SET)) {
    die(
'Fehler beim Setzen des Dateizeigers');
  }
  
  
fwrite($target$daten);
  
stream_copy_to_stream($tmp$target);
  
  
fclose($target);
  
fclose($tmp);
  echo 
"Vielen Dank $heissen. Ihr Eintrag wurde erfolgreich ausgef&uuml;hrt!<br><br><br>";
}

elseif ( !empty (
$_POST['heissen']) and !empty ($_POST['nachrichtenfield']) and !empty ($_POST['wohnen']) and empty ($_POST['briefe']) and empty ($_POST['seite']) ) {

  
$daten '
    <fieldset>
        <legend>
            '
.htmlspecialchars($_POST['heissen'], ENT_QUOTES).' aus '.htmlspecialchars($_POST['wohnen'], ENT_QUOTES).'<br>
            <i>schrieb am '
.date('d.m.Y \u\m H:i').' Uhr</i>
        </legend>
        '
nl2br(htmlspecialchars($_POST['nachrichtenfield'], ENT_QUOTES)) .'
    </fieldset>
  '
;

  
$heissen $_POST['heissen'];
  
$datenbank "gaestebuch.dat";
  
$target fopen($datenbank,"r+");
  if ( 
false===$target && !file_exists($datenbank)) {
    
$target fopen($datenbank,"w+");
  }
  if ( 
false===$target ) {
    die(
'Fehler beim Öffnen der Datei');
  }
  
$tmp tmpfile() or die('Fehler beim Erstellen der temporären Datei');
  
  
stream_copy_to_stream($target$tmp);
  
fflush($tmp);
  
  if ( 
0!==fseek($target0SEEK_SET) || 0!==fseek($tmp0SEEK_SET)) {
    die(
'Fehler beim Setzen des Dateizeigers');
  }
  
  
fwrite($target$daten);
  
stream_copy_to_stream($tmp$target);
  
  
fclose($target);
  
fclose($tmp);
  echo 
"Vielen Dank $heissen. Ihr Eintrag wurde erfolgreich ausgef&uuml;hrt!<br><br><br>";
}

elseif ( !empty (
$_POST['heissen']) and !empty ($_POST['nachrichtenfield']) and !empty ($_POST['briefe']) and empty ($_POST['wohnen']) and empty ($_POST['seite']) ) {

  
$daten '
    <fieldset>
        <legend>
            '
.htmlspecialchars($_POST['heissen'], ENT_QUOTES).
            <i><a href="mailto:'
.htmlspecialchars($_POST['briefe'], ENT_QUOTES).'"><img src="images/email.gif" alt="'.htmlspecialchars($_POST['briefe'], ENT_QUOTES).'"></a><br>
            schrieb am '
.date('d.m.Y \u\m H:i').' Uhr</i>
        </legend>
        '
nl2br(htmlspecialchars($_POST['nachrichtenfield'], ENT_QUOTES)) .'
    </fieldset>
  '
;

  
$heissen $_POST['heissen'];
  
$datenbank "gaestebuch.dat";
  
$target fopen($datenbank,"r+");
  if ( 
false===$target && !file_exists($datenbank)) {
    
$target fopen($datenbank,"w+");
  }
  if ( 
false===$target ) {
    die(
'Fehler beim Öffnen der Datei');
  }
  
$tmp tmpfile() or die('Fehler beim Erstellen der temporären Datei');
  
  
stream_copy_to_stream($target$tmp);
  
fflush($tmp);
  
  if ( 
0!==fseek($target0SEEK_SET) || 0!==fseek($tmp0SEEK_SET)) {
    die(
'Fehler beim Setzen des Dateizeigers');
  }
  
  
fwrite($target$daten);
  
stream_copy_to_stream($tmp$target);
  
  
fclose($target);
  
fclose($tmp);
  echo 
"Vielen Dank $heissen. Ihr Eintrag wurde erfolgreich ausgef&uuml;hrt!<br><br><br>";
}

elseif ( !empty (
$_POST['heissen']) and !empty ($_POST['nachrichtenfield']) and !empty ($_POST['seite']) and empty ($_POST['briefe']) and empty ($_POST['wohnen']) ) {

  
$daten '
    <fieldset>
        <legend>
            '
.htmlspecialchars($_POST['heissen'], ENT_QUOTES).
            <i><a href="'
.htmlspecialchars($_POST['seite'], ENT_QUOTES).'" target=_blank"><img src="images/homepage.gif" alt="'.htmlspecialchars($_POST['seite'], ENT_QUOTES).'"></a><br>
            schrieb am '
.date('d.m.Y \u\m H:i').' Uhr</i>
        </legend>
        '
nl2br(htmlspecialchars($_POST['nachrichtenfield'], ENT_QUOTES)) .'
    </fieldset>
  '
;

  
$heissen $_POST['heissen'];
  
$datenbank "gaestebuch.dat";
  
$target fopen($datenbank,"r+");
  if ( 
false===$target && !file_exists($datenbank)) {
    
$target fopen($datenbank,"w+");
  }
  if ( 
false===$target ) {
    die(
'Fehler beim Öffnen der Datei');
  }
  
$tmp tmpfile() or die('Fehler beim Erstellen der temporären Datei');
  
  
stream_copy_to_stream($target$tmp);
  
fflush($tmp);
  
  if ( 
0!==fseek($target0SEEK_SET) || 0!==fseek($tmp0SEEK_SET)) {
    die(
'Fehler beim Setzen des Dateizeigers');
  }
  
  
fwrite($target$daten);
  
stream_copy_to_stream($tmp$target);
  
  
fclose($target);
  
fclose($tmp);
  echo 
"Vielen Dank $heissen. Ihr Eintrag wurde erfolgreich ausgef&uuml;hrt!<br><br><br>";
}

elseif ( !empty (
$_POST['heissen']) and !empty ($_POST['nachrichtenfield']) and empty ($_POST['seite']) and empty ($_POST['briefe']) and empty ($_POST['wohnen']) ) {

  
$daten '
    <fieldset>
        <legend>
            '
.htmlspecialchars($_POST['heissen'], ENT_QUOTES).' <i>schrieb am '.date('d.m.Y \u\m H:i').' Uhr</i>
        </legend>
        '
nl2br(htmlspecialchars($_POST['nachrichtenfield'], ENT_QUOTES)) .'
    </fieldset>
  '
;

  
$heissen $_POST['heissen'];
  
$datenbank "gaestebuch.dat";
  
$target fopen($datenbank,"r+");
  if ( 
false===$target && !file_exists($datenbank)) {
    
$target fopen($datenbank,"w+");
  }
  if ( 
false===$target ) {
    die(
'Fehler beim Öffnen der Datei');
  }
  
$tmp tmpfile() or die('Fehler beim Erstellen der temporären Datei');
  
  
stream_copy_to_stream($target$tmp);
  
fflush($tmp);
  
  if ( 
0!==fseek($target0SEEK_SET) || 0!==fseek($tmp0SEEK_SET)) {
    die(
'Fehler beim Setzen des Dateizeigers');
  }
  
  
fwrite($target$daten);
  
stream_copy_to_stream($tmp$target);
  
  
fclose($target);
  
fclose($tmp);
  echo 
"Vielen Dank $heissen. Ihr Eintrag wurde erfolgreich ausgef&uuml;hrt!<br><br><br>";
}

elseif ( empty (
$_POST['heissen']) and empty ($_POST['nachrichtenfield']) and empty ($_POST['seite']) and empty ($_POST['briefe']) and empty ($_POST['wohnen']) ) {
}

?>

<p><a href="index.php?p=daten/gaestebuch-eintragen">Ins G&auml;stebuch eintragen!</a></p>

<?php
    $datenbank 
"gaestebuch.dat";
    
readfile($datenbank);
?>


gaestebuch-eintragen.php
HTML-Code:
    <form method="post" action="index.php?p=daten/gaestebuch">
      <fieldset>
		<legend>Ins G&auml;stebuch eintragen:</legend>
		<p class="small">Wird ein Pflichtfeld nicht ausgef&uuml;llt, findet keine Eintragung in das G&auml;stebuch statt!</p>
		<table>
			<tr>
				<td>Name : * </td>
				<td><input type="text" name="heissen" /></td>
			</tr>
			<tr>
				<td>Wohnort : </td>
				<td><input type="text" name="wohnen" /></td>
			</tr>
			<tr>
				<td>E-Mail : </td>
				<td><input type="text" name="briefe" /></td>
			</tr>
			<tr>
				<td>Homepage <i>(mit http://)</i> : </td>
				<td><input type="text" name="seite" value="" /></td>
			</tr>
			<tr>
				<td>Kommentar : * </td>
				<td><textarea name="nachrichtenfield"></textarea></td>
			</tr>
			<tr> 
				<td><img src="daten/captcha.php" border="0" title="Sicherheitscode"></td> 
				<td><input type="text" name="sicherheitscode" size="5"></td> 
			</tr>
				<tr>
				<td></td>
				<td><input type="submit" name="button" value="Eintragen" /></td>
			</tr>
		</table>
		<p>* = Pflichtfeld</p>
	</fieldset>
    </form>
Mit Zitat antworten
Antwort

Stichwörter
formular, gästebuch, kontaktformular, spam, spamschutz

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Gästebuch -Spam Dieter Offtopic 7 29.11.2008 22:03
Gästebuch Hintergrund nuni83 CSS 9 11.08.2008 19:54
Gästebuch - kostenlos, sicher mit Einbauanleitung? hubspe Serveradministration und serverseitige Scripte 13 20.07.2008 20:12
Gästebuch einbinden mini04 CSS 5 17.08.2006 00:20
Valides Gästebuch Retrax (X)HTML 13 01.12.2004 14:42


Alle Zeitangaben in WEZ +2. Es ist jetzt 13:24 Uhr.