ct 22 2005 Mail-Formulare absichern

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Benutzeravatar
Martin Truckenbrodt
Mitglied
Beiträge: 1143
Registriert: 15.08.2003 23:16
Wohnort: Südthüringen
Kontaktdaten:

Beitrag von Martin Truckenbrodt »

Hallo easygo,
der 26.11. ist ja auch schon wieder vorbei! :wink:

Die zweite Komponente des Mailcodes für den 26.11. ist 26*2+40=92.
chr(92)='\'
htmlentities(chr(92))= [edit]??? - Habe ich nicht ausprobiert. Defintiv war aber das Problem, dass $code nicht identisch mit $_POST['code'] war.[/edit]

Meldung: Mailcode fehlt!

Quelle: http://www.lookuptables.com

Gruß Martin
Zuletzt geändert von Martin Truckenbrodt am 27.11.2005 22:34, insgesamt 1-mal geändert.
Advanced Block MOD 1.1.4 ist released! - Verhindere Spam auf Deinem phpBB3 Board mit Stop Forum Spam, BotScout, Akismet, Project Honey Pot und verschiedenen IP-RBL und Domain-RBL DNS Blacklisten! - Meine MODs - phpBB Complete Core
Benutzeravatar
easygo
Mitglied
Beiträge: 2170
Registriert: 03.09.2004 13:45
Kontaktdaten:

Beitrag von easygo »

Martin Truckenbrodt hat geschrieben:Hallo easygo,
der 26.11. ist ja schon wieder vorbei! :wink:
Getestet am 26.11.2005 --> Test passed trough
Martin Truckenbrodt hat geschrieben:Die zweite Komponente des Mailcodes für den 26.11. ist 26*2+40=92.
chr(92)='\'
htmlentities(chr(92))=''

Meldung: Mailcode fehlt!

Quelle: http://www.lookuptables.com
Na immerhin mal ne Quellenangabe...

Nur leider völllig unlogisch von wegen zweite Komponente. :roll:

Hier nochmal der Original-Code als Ausgang -->

Code: Alles auswählen

echo(htmlentities(chr(date("m") * 3 + date("y") + 30) . chr(date("d") * 2 + 40)));
Für den 26.11.2005 ergibt sich daraus folgendes -->

Code: Alles auswählen

echo(htmlentities(chr(68) . chr(92)));
echo: D\

Wie gesagt, es hat funktioniert! Warum auch nicht? easy
Benutzeravatar
Martin Truckenbrodt
Mitglied
Beiträge: 1143
Registriert: 15.08.2003 23:16
Wohnort: Südthüringen
Kontaktdaten:

Beitrag von Martin Truckenbrodt »

Hallo easygo,

bei mir ging das Mailformular Skript am 26.11. ab 0 Uhr nicht mehr.

Dein Beitrag war am 27.11. um 0.44 Uhr geschrieben, so dass ich annahm, dass Du es kurz vorher getestet hast.

Ich habe hier keinen Webserver bei mir rumstehen bei dem ich mal kurz das Datum zurücksetzen könnte, um die Sache zu testen. Also beende ich die Diskussion hiermit.

Gruß Martin
Advanced Block MOD 1.1.4 ist released! - Verhindere Spam auf Deinem phpBB3 Board mit Stop Forum Spam, BotScout, Akismet, Project Honey Pot und verschiedenen IP-RBL und Domain-RBL DNS Blacklisten! - Meine MODs - phpBB Complete Core
Benutzeravatar
easygo
Mitglied
Beiträge: 2170
Registriert: 03.09.2004 13:45
Kontaktdaten:

Beitrag von easygo »

Martin Truckenbrodt hat geschrieben:Ich habe hier keinen Webserver bei mir rumstehen bei dem ich mal kurz das Datum zurücksetzen könnte, um die Sache zu testen. Also beende ich die Diskussion hiermit.
Hö? Zurücksetzen? Diskutieren? :o Wie wärs mal mit nachrechnen?
easygo hat geschrieben:Für den 26.11.2005 ergibt sich daraus folgendes -->

Code: Alles auswählen

echo(htmlentities(chr(68) . chr(92)));
echo ? s.o.
Martin Truckenbrodt hat geschrieben:bei mir ging das Mailformular Skript am 26.11. ab 0 Uhr nicht mehr.
Martin Truckenbrodt hat geschrieben:Ich hätte den Code doch nicht "aufräumen" sollen! :x
Seh ich genau so. easy
Benutzeravatar
Martin Truckenbrodt
Mitglied
Beiträge: 1143
Registriert: 15.08.2003 23:16
Wohnort: Südthüringen
Kontaktdaten:

Beitrag von Martin Truckenbrodt »

Hallo easygo,

worum geht es Dir eigentlich?

Gruß Martin
Advanced Block MOD 1.1.4 ist released! - Verhindere Spam auf Deinem phpBB3 Board mit Stop Forum Spam, BotScout, Akismet, Project Honey Pot und verschiedenen IP-RBL und Domain-RBL DNS Blacklisten! - Meine MODs - phpBB Complete Core
Benutzeravatar
easygo
Mitglied
Beiträge: 2170
Registriert: 03.09.2004 13:45
Kontaktdaten:

Beitrag von easygo »

Martin Truckenbrodt hat geschrieben:worum geht es Dir eigentlich?
Also deine Antworten werden auch immer bescheidener...

EDIT !? :o Mutiert das jetzt zum Kindergarten? :evil:

Zum letzten Mal! Diese Behauptung ist schlichtweg falsch -->
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
Nachweis wurde von mir erbracht, denk ich. (siehe echo)

Btw: das hier ist ein Forum und die Verbreitung von Halbwissen? gefährlich

Drum profiliere dich nie an fremdem Code, solange du ihn nicht
verstehst oder komm halt mit dem Feedback klar. easy
Benutzeravatar
Martin Truckenbrodt
Mitglied
Beiträge: 1143
Registriert: 15.08.2003 23:16
Wohnort: Südthüringen
Kontaktdaten:

Beitrag von Martin Truckenbrodt »

Hallo,

entscheidend ist doch was bei $code != $_POST['code'] herauskommt und nicht was einem der Browser optisch anzeigt.

Und das hat definitiv nicht funktioniert. Ich habe das Skript auf mehreren Seiten im Einsatz und um Mitternacht herum nur noch das Skript einer Seite erweitert. Aber es gingen plötzlich alle Formulare nicht mehr.

Nach Deiner Signatur zu urteilen, macht es wohl wenig Sinn mit Dir weiter zu diskutieren, zumal Du mir ja wohl auch nicht glaubst, was ich schreibe.

Gruß Martin

Nachtrag 1.12.2005:
Der Autor hat das Skript mittlerweile diesbezüglich abgeändert.

Gruß Martin
Advanced Block MOD 1.1.4 ist released! - Verhindere Spam auf Deinem phpBB3 Board mit Stop Forum Spam, BotScout, Akismet, Project Honey Pot und verschiedenen IP-RBL und Domain-RBL DNS Blacklisten! - Meine MODs - phpBB Complete Core
Benutzeravatar
Peggy
Mitglied
Beiträge: 1248
Registriert: 17.10.2003 14:22
Wohnort: Berlin
Kontaktdaten:

Beitrag von Peggy »

Ich würde dieses verbesserte ct-Kontaktformular gerne mit phpBB benutzen.

Vielleicht hat jmd. Ahnung davon und würde das als kleinen MOD zusammenschreiben? :oops:

Also mit Unterstützung des Template-Systems (HTML-Teil in eine contact_body.tpl auslagern) und mit Sprachvariablen.

Wäre schön, wenn man das Formular noch um das Feld "Name" erweitern könnte (also Name, Mail-Adresse, Betreff, Nachricht).

Habe mich selbst mal daran probiert, bin aber gescheitert.
Kein Support per PN/Email/Messenger!
Falls jemand den neuen ICQ-Button braucht: http://www.peggy-para.de/templates/olym ... cq_add.gif
Benutzeravatar
Martin Truckenbrodt
Mitglied
Beiträge: 1143
Registriert: 15.08.2003 23:16
Wohnort: Südthüringen
Kontaktdaten:

Beitrag von Martin Truckenbrodt »

Hallo,
schau mal hier: http://www.phpbb.de/doku/kb/artikel.php?artikel=72

Gruß Martin
Advanced Block MOD 1.1.4 ist released! - Verhindere Spam auf Deinem phpBB3 Board mit Stop Forum Spam, BotScout, Akismet, Project Honey Pot und verschiedenen IP-RBL und Domain-RBL DNS Blacklisten! - Meine MODs - phpBB Complete Core
Benutzeravatar
Peggy
Mitglied
Beiträge: 1248
Registriert: 17.10.2003 14:22
Wohnort: Berlin
Kontaktdaten:

Beitrag von Peggy »

Hmm, ich wusste dass ich hier jetzt nur den Link zur Doku kriege ... :-?
Soweit war ich vor ner Woche schon ...

Ok, im einzelnen hatte ich folgendes gemacht:

So sieht meine contact.php aus:
<?php

define('IN_PHPBB', true);
$phpbb_root_path = './';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);
$userdata = session_pagestart($user_ip, PAGE_CONTACT);
init_userprefs($userdata);

//Gib Fehler und Warnungen aus
error_reporting(E_ALL);
//Deutschsprachige Umgebung, damit die
//regulären Ausdrücke auch Umlaute etc. erkennen
setlocale(LC_ALL, 'de_DE');
//Erzeuge einen zufällig aussehenden Zugangscode aus dem Datum ...
$code = chr((date("y") + 7) % 10 + date("m") + 68 + (date("m") % 2) * 32) . chr((date("d") + (date("d") %2)) / 2 + 66 + (37 * (date("d") %2)));
//... den der Anwender mittels verborgenem Eingabefeld übergibt.
//So lässt sich das Gros der skriptgesteuerten Angriffe von
//vornherein abblocken.
//Wurde das Formular abgeschickt?
//Falls ja: Daten prüfen und versenden
if(isset($_POST['los'])) {
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.
$pruefung = array(
'absender' => '/^[\w.+-]{2,}\@[\w.-]{2,}\.[a-z]{2,6}$/',
'betreff' => '/^[[:print:]]{3,}$/',
'text' => '/^[[:print:][:space:]]{10,}$/'
);
//Durchlaufe alle Formulardaten:
foreach($_POST as $parameter => $wert) {
//Formularfelder, die in $pruefung stehen,
//müssen in die oben definierten Muster passen
if(isset($pruefung[$parameter])) {
if(!preg_match($pruefung[$parameter], $wert)) die('Probleme mit Feld ' . $parameter . ': ' . $wert);
} else {
//Der Rest wird weggeworfen.
unset($_POST[$parameter]);
}
}
//Prüfe, ob die Absenderadresse einem gültigen MX-Host angehört
//Zu jeder Domain in einer Mailadresse (nach dem @-Zeichen)
//sollte ein Mail Exchange Resource Record (MX-RR) im Domain Name
//System (DNS) eingetragen sein. Die MX-Hosts versenden die E-Mail
//per SMTP. getmxrr() schreibt MX-Hosts in das Array $mxhosts
//ACHTUNG: Dieser Befehl ist nur auf Unix-Maschinen implementiert,
//unter anderen Betriebssystemen ist die Zeile zu streichen!
if(!getmxrr(substr(strstr($_POST['absender'], '@'), 1), $mxhosts)) die("Konnte keine gültige Domain für " . $_POST['absender'] . " finden!");
//Die Formulardaten sind ok -- der Mailversand wird vorbereitet:
//mail() erwartet Empfänger, Betreff, Text und weitere Kopfdaten
if(mail('immun@arcor.de', $_POST['betreff'], $_POST['text'], "From:" . $_POST['absender'])) {
//Es hat geklappt: Bestätigung ausgeben
echo "<p>Nachricht von " . $_POST['absender'] . " an Administrator gesendet!</p>";
} else {
//Irgendwas ist schiefgelaufen :-(
echo "<p>Nachricht konnte nicht gesendet werden!</p>";
}
} else {
//Es wurden keine Formulardaten übergeben ->
//Gib einen HTML-Block mit dem Formular aus.

//Schließt die if-else-Schleife
}

$page_title = $lang['Contact_title'];
include($phpbb_root_path . 'includes/page_header.'.$phpEx);

// TEMPLATE VARS START
$template->assign_vars(array(
'L_CONTACT_TITLE' => $lang['Contact_title'],)
);
// TEMPLATE VARS END

$template->set_filenames(array(
'body' => 'contact_body.tpl')
);

$template->pparse('body');
include($phpbb_root_path . 'includes/page_tail.'.$phpEx);


?>
Ergänzung in der lang_main.php:
$lang['Contact_title'] = 'Kontakt';
(um die anderen Wörter wollte ich mich später kümmern, wenn der Fehler behoben ist)

Meine contact_body.tpl sieht so aus:
<p>Senden Sie eine Nachricht:</p>
<form method="post" action="">
<table>
<tbody>
<tr>
<td>
<label for="absender">Absender:</label><br/>
E-Mail-Adresse
</td>
<td>
<input id="absender" name="absender"/>
</td>
</tr>
<tr>
<td>
<label for="betreff">Betreff:</label><br/>
mindestens drei Zeichen
</td>
<td>
<input id="betreff" name="betreff"/>
</td>
</tr>
<tr>
<td>
<label for="text">Text:</label><br/>
mindestens zehn Zeichen
</td>
<td>
<textarea id="text" name="text" rows="3" cols="40">
</textarea>
<input type="hidden" id="code" name="code" value="<?php echo($code); ?>"/>
</td>
</tr>
<tr>
<td></td>
<td>
<input type="submit" name="los" value="Abschicken!"/>
</td>
</tr>
</tbody>
</table>
</form>
Das Formular wird richtig dargestellt, keine Fehler beim Aufruf der Datei.
Nur beim Absenden der Mail kommt diese

Fehlermeldung:

Mailcode fehlt!

:-?

Hab kein Plan.
Kein Support per PN/Email/Messenger!
Falls jemand den neuen ICQ-Button braucht: http://www.peggy-para.de/templates/olym ... cq_add.gif
Antworten

Zurück zu „Coding & Technik“