Seite 1 von 2

ct 22 2005 Mail-Formulare absichern

Verfasst: 22.11.2005 23:31
von Martin Truckenbrodt
Hallo miteinander,
schöner Artikel auf den Seiten 208-209. Unter dem Soft_link bekommt man auch ein noch stärker abgesichertes Skript.

Nur funzt bei mir die Mailcode Abfrage nicht - bekomme immer die die() Meldung:

Code: Alles auswählen

 //Erzeuge einen zufällig aussehenden Zugangscode aus dem Datum ...
$code = chr(date("m") * 3 + date("y") + 30) . chr(date("d") * 2 + 40);
  //... den der Anwender mittels verborgenem Eingabefeld übergibt.
  //So lässt sich das Gros der skriptgesteuerten Angriffe von
  //vornherein abblocken.
if (!isset($_POST['code']) || $_POST['code'] != $code) die ('Mailcode fehlt!');
  //Liste der zu überprüfenden Formularfelder:
  //'absender' muss genau eine Mailadresse sein,
  //'betreff' ist ein mindestens drei Zeichen langer Text ohne Umbruch,
  //'text' muss zehn Zeichen lang sein.

...

<input type="hidden" id="code" name="code" value="
<?php
//Der gleiche Algorithmus wie oben!
//htmlentities() entschärft eventuelle Sonderzeichen.
echo(htmlentities(chr(date("m") * 3 + date("y") + 30) . chr(date("d") * 2 + 40)));?>
						"/>
Lösche ich testweise

Code: Alles auswählen

 || $_POST['code'] != $code
heraus, funzt die Sache.

Danke und Gruß Martin

Verfasst: 23.11.2005 21:07
von Martin Truckenbrodt
Hallo,
das testweise Herausnehmen von

Code: Alles auswählen

htmlentities
bringt leider auch nichts. :-?

Gruß Martin

Verfasst: 23.11.2005 21:11
von Jensemann
Guck doch erstmal, auf was $_POST["code"] bei dir gesetzt ist, nachdem du das Formular abschickst.

Verfasst: 23.11.2005 21:34
von Martin Truckenbrodt
Hallo Jens,
die Übergabe von 'code' klappt, $_POST["code"] bringt (auf den ersten Blick) das selbe Ergebnis wie $code.

Ich habe gerade mal Folgendes gemacht:

Code: Alles auswählen

if (!isset($_POST['code']) || $_POST['code'] == $code) die ('Mailcode fehlt!');
Jetzt scheint es funzen. Nur komme ich mangels Erfahrung mit der Syntax dieser Zeile nicht ganz zurecht. :roll:

Funktioniert das Skript jetzt richtig oder habe ich nur ein Workaround erstellt? :-?

Hier gibt es das komplette Mail-Formular: ftp://ftp.heise.de/pub/ct/listings/0522-208.zip

Gruß Martin

Verfasst: 23.11.2005 22:20
von Martin Truckenbrodt
Hallo,
habe mich bezüglich Operatoren etwas schlauer gemacht 8) :
Ich hatte wohl zuletzt wirklich nur ein Workaround erstellt. :cry:

Das Problem scheint wirklich der Ausdruck

Code: Alles auswählen

$_POST['code'] != $code
zu sein.
Sind das vielleicht irgendwie unterschiedliche Datentypen?

Gruß Martin

Verfasst: 24.11.2005 17:34
von Martin Truckenbrodt
Hallo,

gettype($code); und gettype($_POST['code']); ergeben beide als Ergebnis string.

Hilfe! :(

Gruß Martin

Verfasst: 24.11.2005 18:39
von Pyramide
Meine Vermutung wäre, daß das Problem die Leerzeile hier ist:

Code: Alles auswählen

<input type="hidden" id="code" name="code" value="
<?php

Verfasst: 24.11.2005 22:36
von Martin Truckenbrodt
Hallo Pyramide,

Treffer versenkt! Bist ein Schatz! :wink:

Ich hätte den Code doch nicht "aufräumen" sollen! :x

Ich werde es Dir nie vergessen! :wink:

Danke und Gruß Martin

Verfasst: 26.11.2005 23:26
von Martin Truckenbrodt
Hallo,
falsl jemand auch das Skript von der c't eingebaut hat und sich wundert wieso es am 25.11. noch geht und am 26.11. nicht mehr, hier die Auflösung:
Die Funktion für den Mailcode muss wie folgt ausssehen, damit man vernünftige ASCII Zeichen bekommt (nur Großbuchstaben und vor allem keine Sonderzeichen! :evil: ):

Code: Alles auswählen

chr(date("m") + date("y") + 59) . chr(floor(date("d") / 2) + 65);
Ansonsten finde ich das Skript super. Man kann z.B. auch recht einfach eine Auswahl für mehrere verschiedene Ansprechpartner einbauen.

Bin schon am überlegen eventuell einen phpBB MOD draus zu machen. Alle ähnlichen MODs, die ich die letzten Tagen sah, waren wesentlich umfangreicher, was IMO für ein Notfall Kontaktformular (Kennwort vergessen, Forum kaputt, Beschwerde, usw...) nicht notwendig ist.

Gruß Martin

Verfasst: 27.11.2005 00:44
von easygo
Martin Truckenbrodt hat geschrieben:falsl jemand auch das Skript von der c't eingebaut hat und sich wunder weiso es am 25.11. noch geht und am 26.11. nicht mehr
Nö, kann ich nicht bestätigen. Funktioniert nach wie vor. easy