Seite 3 von 6
Verfasst: 20.11.2005 13:31
von snakepilsken
Also ich schreibe in die Messagebox einen Text und am Ende der Zeile
drücke ich enter. Wenn ich bei de letzten Zeile nicht enter drücke kommt
der Text nicht an.
Wegen dem Zähler ist mir nicht aufgefallen, ich kann soviel Formulare absenden wie ich mag die kommen zumindest alle an.
edit: Stimmt, der Zähler geht nicht höher.
Verfasst: 20.11.2005 13:35
von AmShaegar
gut, mit dem zähler, da kümmere ich mich noch drum, aber was du da für probleme mit dem enter hast versteh ich nciht... bei mir ist das nicht so... wüsste auch nciht wie ich d as beheben kann.
Verfasst: 20.11.2005 13:42
von snakepilsken
ehrlich gesagt is das auch nicht soooo wichtig.
Aber wenn das mit dem Zähler noch hinhaut ist es perfekt und könnte
auch anderen zur Verfügung gestellt werden im Snippet Forum.
Klasse Arbeit !!!
Verfasst: 20.11.2005 13:46
von IPB_Flüchtling
Ahoi,
zum Zähler- oder Nicht-Absenden-Problem kann ich leider nichts sagen. Aber ich möchte hier einen kleinen selbstgeschriebenen Code vorstellen, von dem ich hoffe, dass er die Sicherheit etwas verbessert.
Der Code gehört in der contact_form.php oberhalb von
Code: Alles auswählen
// All fields match criteria, attempt to send mail
if (@mail(
eingefügt. Zusätzlich muss man in der lang_contact.php noch ein Feld mit Namen Sicherheit einfügen. Zum Beispiel:
Code: Alles auswählen
$lang['Sicherheit'] = 'Deine Nachricht wurde aus Sicherheitsgründen nicht abgeschickt!<br><br>Die Felder "Name" und "E-Mail" dürfen keine Zeilenumbrüche ("\n" bzw. "\r") enthalten.<br>Bitte vermeide in Deiner Nachricht den Begriff "Content-Type".<br>Deine Nachricht muss kürzer als 4000 Zeichen sein.';
Und ein paar Variablen müssen auch noch angepasst werden. Statt strpos kann man auch eregi verwenden:
Code: Alles auswählen
// additional Security Check
$laenge_name = strlen($from_name);
$laenge_email = strlen($from_email);
$laenge_nachricht = strlen($message);
$maxlaenge_name = 50;
$maxlaenge_email = 50;
$maxlaenge_nachricht = 4000;
if ($laenge_name > $maxlaenge_name) {
$spamversuch = 1; }
if ($laenge_email > $maxlaenge_email) {
$spamversuch = 1; }
if ($laenge_nachricht > $maxlaenge_nachricht) {
$spamversuch = 1; }
if ($subject != "Kontaktformular") {
$spamversuch = 1; }
if ($to_admin != "deine_email_adresse@domain.tld") {
$spamversuch = 1; }
if (eregi('Content-Type:', $to_admin)) {
$spamversuch = 1; }
if (eregi('Content-Type:', $subject)) {
$spamversuch = 1; }
if (eregi('Content-Type:', $message)) {
$spamversuch = 1; }
if (eregi('Content-Type:', $from_name)) {
$spamversuch = 1; }
if (eregi('Content-Type:', $from_email)) {
$spamversuch = 1; }
if (eregi('Content-Type:', $enquiry)) {
$spamversuch = 1; }
if ( (strpos($to_admin, "\n") != false) || (strpos($to_admin, "\r") != false) ) {
$spamversuch = 1; }
if ( (strpos($subject, "\n") != false) || (strpos($subject, "\r") != false) ) {
$spamversuch = 1; }
if ( (strpos($from_name, "\n") != false) || (strpos($from_name, "\r") != false) ) {
$spamversuch = 1; }
if ( (strpos($from_email, "\n") != false) || (strpos($from_email, "\r") != false) ) {
$spamversuch = 1; }
if ( (strpos($enquiry, "\n") != false) || (strpos($enquiry, "\r") != false) ) {
$spamversuch = 1; }
if ($spamversuch) {
message_die(GENERAL_ERROR, $lang['Sicherheit']);
exit;
}
// End of Security Check
Der obige Code stellt nur eine zusätzliche Maßnahme gegen E-mail-Injection dar und wurde von folgendem lesenswerten Thread inspiriert:
http://forums.oscommerce.de/lofiversion ... 33375.html
Gegen SQL-Injection taugt der Code wahrscheinlich nichts. Nehme ich einmal an.
LG, IPB_Flüchtling
Verfasst: 20.11.2005 14:09
von AmShaegar
neuste version der contact_form.php:
http://www.terraemotus.de/contact_form.php.txt
mussten einige änderungen vorgenommen werden. zum einen das hochzählen der beiträge und zum anderen konnten beiträge nur gelesen werden, wenn im forum noch keine beiträge gelöscht wurden...
mein hinzugefügter code:
Code: Alles auswählen
// Insert into tables by AmShaegar
$forum_id = '1'; // Gewünschtes Forum auswählen!!!
//$post_id = ;
$poster_id = $userdata['user_id'];
$post_time = time();
$poster_ip = $user_ip;
$post_username = $userdata['session_logged_in'] ? $userdata['username'] : $from_name;
$enable_bbcode = '0';
$enable_html = '0';
$enable_smilies = '1';
$enable_sig = '0';
//$post_edit_time = ;
//$post_edit_count = ;
//$topic_id = ;
$topic_title = $enquiry;
$topic_poster = $poster_id;
$topic_time = $post_time;
//$topic_views = ;
///$topic_replies = ;
//$topic_status = '0';
//$topic_vote = '0';
//$topic_type = '0';
/* $SEL = "SELECT post_id FROM ".POSTS_TABLE." ORDER BY post_id DESC LIMIT 1";
$QUE = mysql_query($SEL);
$res = mysql_fetch_object($QUE);
$post_id = $res->post_id + 1;
$topic_first_post_id = $post_id;
$topic_last_post_id = $post_id; */
//$topic_moved_id = '0';
$INS_topics = "INSERT INTO ".TOPICS_TABLE." (forum_id, topic_title, topic_poster, topic_time) VALUES ('$forum_id', '$topic_title', '$topic_poster', '$topic_time')";
mysql_query($INS_topics) or die("pech1");
$SEL_t = "SELECT topic_id FROM ".TOPICS_TABLE." WHERE topic_time LIKE '$topic_time'";
$QUE_t = mysql_query($SEL_t);
$res_t = mysql_fetch_object($QUE_t);
$topic_id = $res_t->topic_id;
$INS_posts = "INSERT INTO ".POSTS_TABLE." (topic_id, forum_id, poster_id, post_time, poster_ip, post_username, enable_bbcode, enable_html, enable_smilies, enable_sig) VALUES ('$topic_id', '$forum_id', '$poster_id', '$post_time', '$poster_ip', '$post_username', '$enable_bbcode', '$enable_html', '$enable_smilies', '$enable_sig')";
mysql_query($INS_posts) or die("pech2");
$bbcode_uid = '1234567890';
$post_subject = $enquiry;
$post_text = addslashes($message);
$SEL = "SELECT post_id FROM ".POSTS_TABLE." ORDER BY post_id DESC LIMIT 1";
$QUE = mysql_query($SEL);
$res = mysql_fetch_object($QUE);
$post_id = $res->post_id;
$UPD_topics = "UPDATE ".TOPICS_TABLE." SET topic_first_post_id = '$post_id', topic_last_post_id = '$post_id' WHERE topic_time LIKE '$topic_time'";
mysql_query($UPD_topics) or die("pech4");
$INS_posts_text = "INSERT INTO ".POSTS_TEXT_TABLE." (post_id, bbcode_uid, post_subject, post_text) VALUES ('$post_id', '$bbcode_uid', '$post_subject', '$post_text')";
mysql_query($INS_posts_text) or die("pech3");
$SEL_f = "SELECT forum_posts, forum_topics FROM ".FORUMS_TABLE." WHERE forum_id LIKE '$forum_id'";
$QUE_f = mysql_query($SEL_f);
$res_f = mysql_fetch_object($QUE_f);
$forum_posts = $res_f->forum_posts + 1;
$forum_topics = $res_f->forum_topics + 1;
$forum_last_post_id = $post_id;
$UPD_forums = "UPDATE ".FORUMS_TABLE." SET forum_posts = '$forum_posts', forum_topics = '$forum_topics', forum_last_post_id = '$forum_last_post_id' WHERE forum_id = '$forum_id'";
mysql_query($UPD_forums) or die("pech5");
ausgiebige tests, feedback und kritik sind erwünscht!!!
Verfasst: 20.11.2005 14:36
von snakepilsken
@AmShaegar: funktioniert prächtig !
@IPB_Flüchtling: Dein Code gehört in das Formular welches per mail versendet wird ?
Verfasst: 20.11.2005 14:42
von AmShaegar
@IPB_Flüchtling: Dein Code gehört in das Formular welches per mail versendet wird ?
denke schoin ... weiß acuh nicht ganz was das mit dem thema zu tu hat

Verfasst: 20.11.2005 17:36
von IPB_Flüchtling
@snakepilsken:
Der Code gehört in der contact_form.php eingefügt, und zwar oberhalb von
Code: Alles auswählen
// All fields match criteria, attempt to send mail
if (@mail(
Wichtig: Der Code ist nur als Gedankenanstoß zu verstehen!
Es kann sein, dass einige Variabeln bei Dir etwas anders heißen. (Ich verwende ja eine Version des Easy Contact Form - Mod.)
Außerdem prüft der Code nicht auf unerlaubte Zeichen im Feld Username, weil ich diese Abfrage sowohl im Template als auch in der contact_form.php deaktiviert habe. Die Abfrage für den Username lässt sich nach dem gleichen Muster aber leicht selbst einfügen.
Last not least weiß ich nicht, ob die Variable $spamversuch bei einem erfolgten Spamversuch dauerhaft auf 1 gesetzt bleibt (kenne mich mit php wirklich nicht gut aus). Falls dies der Fall sein sollte, ließe sich dann auch bei weiteren Versuchen keine Kontaktmail mehr verschicken. Als Abhilfe müsste ganz oben in der contact_form.php die Variable auf 0 gesetzt werden: $spamversuch = 0;
Wie gesagt: Das Ganze soll eher als Gedankenanstoß dienen. Der von mir gepostete Code lässt sich aber einfach an eigene Bedürfnisse anpassen.
Achja: Folgende Zeilen müssten Euren Einstellungen entsprechend angepasst werden:
Code: Alles auswählen
$maxlaenge_name = 50; // wie lange darf Absendername sein?
$maxlaenge_email = 50; // wie lange darf E-Mail-Adresse sein?
$maxlaenge_nachricht = 4000; // wie lange darf Nachricht sein?
if ($subject != "Kontaktformular") { // wie lautet Deine Betreffzeile?
if ($to_admin != "deine_email_adresse@domain.tld") { // bitte Deine E-Mail-Adresse angeben
LG, IPB_Flüchtling
Verfasst: 20.11.2005 19:18
von IPB_Flüchtling
@AmShaegar:
cback war so nett, sich Deinen Code kurz anzusehen. Schaut gut aus! Ein paar interessante Tipps hatte er auch noch:
http://www.community.cback.de/viewtopic ... 7332#47332
Hoffe, Du kannst etwas damit anfangen.
Vielen Dank noch einmal für Deine Bemühungen!
LG, IPB_Flüchtling
Verfasst: 20.11.2005 19:53
von snakepilsken
AmShaegar, auch von mir noch mal allerherzlichsten Dank das Du Dir für mich/uns
Zeit genommen hast das Problem zu lösen.
Muß denn laut Cbacks Auskunft da noch was geändert werden, nein oder ?
Gruß
Dietmar