Frage zu contact form 1.1.0

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.
AmShaegar
Mitglied
Beiträge: 408
Registriert: 09.07.2004 17:33

Beitrag von AmShaegar »

das mit den htmlspecialchars geht schon klar, da die irgendwie schon vom eigentlcihen script gelöscht werden.. glecihes gilt für php-scripte, da alles, was innerhalb von "< >" steht mitsamt den klammern bevor es in die datenbank kommt gleich gelöscht wird!!!
IPB_Flüchtling
Mitglied
Beiträge: 1862
Registriert: 23.12.2004 22:46

Beitrag von IPB_Flüchtling »

Hallo,

hätte da noch eine Verständnisfrage: Angenommen man würde auf die phpbb-eigene Funktion submit_post zurückgreifen, dann wären ja sowieso von vornherein alle Sicherheitsmaßnahmen ergriffen und gleichzeitig würde es auch noch eine Flood Control geben, oder?

Eine Flood Control wäre meines Erachtens schon sehr sinnvoll, weil das Kontaktformular sonst missbraucht werden könnte, um das ganze Board lahmzulegen.

Habe in Bezug auf die Frage, wie submit_post eingebunden werden könnte bzw. zur Flood-Problematik, zwei interessante Threads gefunden:

http://www.phpbb.de/viewtopic.php?p=346082#346082
http://www.phpbb.de/viewtopic.php?t=32324

LG, IPB_Flüchtling
AmShaegar
Mitglied
Beiträge: 408
Registriert: 09.07.2004 17:33

Beitrag von AmShaegar »

gut, ich sag mal viel spaß weiterhin, ich für meinen teil bin fertig damit... falls es probleme geben sollte, sollte amn es einbauen, aber solange keine diesbezüglcihen schwierigkeiten auftreten... bis dann ;-)
IPB_Flüchtling
Mitglied
Beiträge: 1862
Registriert: 23.12.2004 22:46

Beitrag von IPB_Flüchtling »

AmShaegar hat geschrieben:gut, ich sag mal viel spaß weiterhin, ich für meinen teil bin fertig damit... falls es probleme geben sollte, sollte amn es einbauen, aber solange keine diesbezüglcihen schwierigkeiten auftreten... bis dann ;-)
Verstehe ich sehr gut! :D

Habe mir die Sache auch noch einmal angesehen und muss gestehen, dass ich zur Einbindung der phpbb-eigenen Posting-Funktion nicht imstande bin. Das übersteigt (derzeit) einfach meine Fähigkeiten.

Allerdings bin ich mir ziemlich sicher, dass ich es schaffen werde, cbacks Flood-control-Routine aus dem Cracker Tracker auch auf das Kontaktformular umzumünzen. Das Ganze wird aber vermutlich noch mehrere Tage dauern. Sobald ich eine Lösung gefunden habe, werde ich sie hier posten.

Herzlichen Dank noch einmal an AmShaegar!

LG, IPB_Flüchtling
IPB_Flüchtling
Mitglied
Beiträge: 1862
Registriert: 23.12.2004 22:46

Beitrag von IPB_Flüchtling »

So,

habe es jetzt tatsächlich geschafft, eine Flood Control in den Easy Contact Form - Mod zu integrieren, sodass man innerhalb eines frei festlegbaren Zeitraumes nur eine Kontaktabfrage abschicken kann.

Wichtig:
- Vor Eingriffen in die Datenbank unbedingt ein Backup anfertigen.
- Meine Abänderung von AmShaegars Code setzt voraus, dass cbacks CrackerTracker (siehe meine Signatur) installiert ist.


1. Führe in phpMyAdmin folgendes SQL-Query aus:

Code: Alles auswählen

INSERT INTO phpbb_cracktrack (name, secval) VALUES ('lastcontact', '0');
2. Befolge die unten stehenden Anweisungen:

Code: Alles auswählen


#
#-----[ OPEN ]------------------------------------------
#

lang_contact.php


#
#-----[ FIND ]------------------------------------------
#

//
// That's all, Folks!

#
#-----[ BEFORE, ADD ]------------------------------------------
#

$lang['Floodschutz']  = 'Über dieses Kontaktformular kann aus Sicherheitsgründen nur alle 30 Sekunden eine E-Mail abgeschickt werden. Bitte warte noch %s Sekunden, bis Du das Kontaktformular benutzen kannst.';

#
#-----[ OPEN ]------------------------------------------
#

contact_form.php

#
#-----[ FIND ]------------------------------------------
#

include($phpbb_root_path . 'includes/page_header.'.$phpEx);

#
#-----[ AFTER, ADD ]------------------------------------------
#

//
// CBACK CrackerTracker Flood Protection
//
  $lcontimestamp = '';
  $sql = "SELECT secval FROM " . CRACKTRACK . " WHERE name = 'lastcontact'";
  if( !($result = $db->sql_query($sql)) )
  {
	message_die(CRITICAL_ERROR, "Could not query config information", "", __LINE__, __FILE__, $sql);
  }

  $row = $db->sql_fetchrow($result);
  $lcontimestamp = $row['secval'];
  if ( $lcontimestamp >= time() )
  {
    $waittime = 0;
    $waittime = $lcontimestamp - time();
    $waitmsg  = '';
    $waitmsg  = sprintf($lang['Floodschutz'],$waittime);
	message_die(GENERAL_MESSAGE, $waitmsg);
  }

#
#-----[ FIND ]------------------------------------------
#

   // Get users IP addy for mail header
   $user_ip = get_ip();

#
#-----[ AFTER, ADD ]------------------------------------------
#

// Insert into tables by AmShaegar

   $forum_id = '61';  // Gewünschtes Forum auswählen!!!
   $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';

   $topic_title = $enquiry;
   $topic_poster = $poster_id;
   $topic_time = $post_time;

   $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("Leider ist ein Fehler aufgetreten. Die E-Mail wurde nicht verschickt.");

   $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("Leider ist ein Fehler aufgetreten. Die E-Mail wurde nicht verschickt.");

   $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("Leider ist ein Fehler aufgetreten. Die E-Mail wurde nicht verschickt.");

   $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("Leider ist ein Fehler aufgetreten. Die E-Mail wurde nicht verschickt.");

   $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'";

   $ergebnis = mysql_query($UPD_forums);

if ($ergebnis) {
    	$stime = time() + 30; //hier wird das Flood-Intervall in Sekunden festgelegt
	    $sql = "UPDATE " . CRACKTRACK . " SET secval = " . $stime . " WHERE name = 'lastcontact'";
    	$db->sql_query($sql);
    	
		echo'<meta http-equiv="refresh" content="6;url=' . append_sid($phpbb_root_path . "index.$phpEx") . '">';
      message_die(GENERAL_MESSAGE, $message = $lang['ESuccessfully'] . '<br /><br />' . sprintf($lang['Click_return_index'], '<a href="' . append_sid($phpbb_root_path . "index.$phpEx") . '">', '</a>') . '');

} else {
		message_die(GENERAL_ERROR, $lang['EMain_error']);
		exit;
}

// End of Insert into tables by AmShaegar

Herzlichen Dank noch einmal an AmShaegar & cback!

LG, IPB_Flüchtling
snakepilsken
Mitglied
Beiträge: 352
Registriert: 13.10.2005 22:18
Wohnort: Dortmund

Beitrag von snakepilsken »

Brauch ich das auch wenn ich nur Formulare benutze welche nur direkt ins Forum schreiben auch ?

MfG
Dietmar
IPB_Flüchtling
Mitglied
Beiträge: 1862
Registriert: 23.12.2004 22:46

Beitrag von IPB_Flüchtling »

Hallo Dietmar,

brauchen ist vielleicht das falsche Wort. Also ich lasse mir auch keine E-Mails über das Kontaktformular mehr zuschicken - alle Kontaktanfragen wandern direkt in ein (unsichtbares) Forum.

Meine Lösung bietet halt einfach einen zusätzlichen Schutz, weil der Server über zuviele Kontaktanfragen in zu kurzer Zeit nicht mehr ins Schwitzen gebracht werden kann: http://de.wikipedia.org/wiki/Denial_of_Service

Aus derartigen Schutzüberlegungen heraus hat ja auch cback in seinen CrackerTracker einen Floodschutz für Neuregistrierungen und für die Suchfunktion eingebaut.

Stell Dir mal vor, jemandem gelingt es, das Captcha in der neuesten Version des Mods zu überlisten und er schickt Dir scriptgesteuert über Nacht alle paar Sekunden eine mehrere kb große Kontaktanfrage. Selbst wenn der Server das wegsteckt, hast Du am nächsten Morgen eine nette Überraschung...

LG, IPB_Flüchtling
snakepilsken
Mitglied
Beiträge: 352
Registriert: 13.10.2005 22:18
Wohnort: Dortmund

Beitrag von snakepilsken »

Hi IPB_Flüchtling

Morgen mal verbasteln.
Ich sag schonmal danke für die Mühe

Wie mache ich das denn ?

Code: Alles auswählen

INSERT INTO phpbb_cracktrack (name, secval) VALUES ('lastcontact', '0');
Und ich habe das Contact Formular 3x eingebaut muß ich den Eintrag hier drüber auch 3x machen ? :oops:


Gruß
Dietmar
IPB_Flüchtling
Mitglied
Beiträge: 1862
Registriert: 23.12.2004 22:46

Beitrag von IPB_Flüchtling »

Hallo Dietmar,

zum Ausführen der SQL-Anweisung muss bereits der CrackerTracker installiert sein - wenn Du das nicht hast, müsstest Du stattdessen eine eigene Tabelle in die Datenbank einfügen. (Ich habe auf die CrackerTracker-Tabelle zurückgegriffen, weil mein Flooding-Schutz für das Mailformular ja ebenfalls auf der Schutzroutine des CrackerTracker basiert. Falls Du den CrackerTracker nicht installiert hast und auch nicht installieren willst, lasse es mich wissen. Ich glaube, ich bekomme es hin, auch eine ganze Tabelle in die Datenbank einzufügen.)

Also, um folgende Zeile ausführen zu lassen, vorausgesetzt Du hast den CrackerTracker installiert (vorher ein Datenbank-Backup anfertigen!), öffnest Du phpMyAdmin, wählst Deine phpbb-Datenbank auf, klickst auf "SQL", gibst die Zeile in das Eingabefeld ein und klickst auf "Go" bzw. "ok". Das war es schon. Mehr zum Umgang mit phpMyAdmin findest Du hier: http://www.phpbb.de/doku/kb/artikel.php?artikel=122
snakepilsken hat geschrieben:Und ich habe das Contact Formular 3x eingebaut muß ich den Eintrag hier drüber auch 3x machen?
Was meinst Du jetzt genau damit? Wenn Du 1 phpbb-Board hast und ein und dasselbe Kontaktformular an 3 verschiedenen Stellen aufrufst, brauchst Du die Zeile nur einmal eingeben. Wenn Du aber drei verschiedene Boards in unterschiedlichen Ordnern hast, musst Du die Zeile für jede der drei Datenbanken eingeben - dann wechselst Du via phpMyAdmin zwischen den Datenbanken. Bitte um nähere Auskünfte.

Schönen Tag!
IPB_Flüchtling
snakepilsken
Mitglied
Beiträge: 352
Registriert: 13.10.2005 22:18
Wohnort: Dortmund

Beitrag von snakepilsken »

Hi IPB_Flüchtling,

der Cracker tracker ist installiert.
Aber da man ja bei jeder Anfrage diesen 5-stelligen Code eingeben muß
und dieser jedes Mal anders ist, kann doch sowas nciht passieren oder ?

Code: Alles auswählen

Stell Dir mal vor, jemandem gelingt es, das Captcha in der neuesten Version des Mods zu überlisten und er schickt Dir scriptgesteuert über Nacht alle paar Sekunden eine mehrere kb große Kontaktanfrage. Selbst wenn der Server das wegsteckt, hast Du am nächsten Morgen eine nette Überraschung... 

Ich habe das Kontaktformular für 3 unterschiedliche Zwecke auf einem Board im Einsatz.
Ich habe die Abfragen jeweils umformuliert und alle Dateien 3x

In der Art etwa

contact_form.php
contact_form2.php
contact_form3.php


Gruß Dietmar
Antworten

Zurück zu „Coding & Technik“