Contactable – Kontaktformular in WordPress

bueltge.de [by:ltge.de] wird von Frank Bültge geführt, administriert und gestaltet. Alle Inhalte sind persönlich von mir ausgewählt und erstellt, nach bestem Gewissen und Können, was die Möglichkeit von Fehlern nicht ausschließt.

Comments

  
  1. Markus says:

    Das scheint endlich mal was zu sein wie ich mir das vorstell. Keine ständigen DB Afragen und dergleichen. Danke für diesen Artikel, werd mir das ganze gleich mal anschauen und testen.

  2. Robert says:

    Frank, das ist der pure Wahnsinn - wenn ich das mal so unverblümt sagen darf. Bitte warne deine Leser vor dem Einsatz!

    Andernfalls laden sich die Leute ein offenes Spam-Relay auf den Server (ich meine damit das in Contactable verpackte mail.php), und wundern sich dann, wenn ihnen der Webhoster den Account stilllegt oder ihre Domain in die Spamfilter rutscht, nachdem ihre Server den Postverteiler für tausende Vi4gra-Mails gespielt haben.

    Jedes herkömmliche halbwegs professionelle Kontaktformular hat zumindest einen fest kodierten Empfänger, die besseren schützen sich vor Mißbrauch mit nonces oder anderen CSRF-Schutzmaßnahmen.

    Contactables mail.php jedoch lässt sich zum Versand beliebiger Botschaften an beliebige Empfänger einsetzen:

    $recipient = $_GET['recipient'];
    $message = " Message: $comment \r \n From: $name \r \n Reply to: $email";
    [...]
    mail($recipient, $subject, $message);

    Das sind genau die Fälle, die PHP in den Geruch einer Fricklersprache gebracht haben.

    • @Robert: du hast Recht; leider - eventuell könnte man das im Umfeld von WP mit Hilfe der Funktion wp_mail() von WP absichern?

      
      <?php
      	$recipient = $_GET['recipient'];
      	$name = $_GET['name'];
      	$email = $_GET['email'];
      	$comment = $_GET['comment'];
      	$subject = $_GET['subject'];	
      	$notes = stripcslashes($notes);	
      	$message = " Message: $comment \r \n From: $name  \r \n Reply to: $email";
      	//mail($recipient, $subject, $message);
      	if ( !function_exists('wp_mail') )
      		include( ABSPATH . WPINC . 'pluggable.php' );
      	wp_mail($recipient, $subject, $message);
      ?>
      
  3. Robert says:

    Ich kann nicht erkennen, dass das etwas nützen würde: Solange $recipient aus $_GET gelesen wird, sendet dein Server an beliebige Empfänger.

    Für jeden freundlichen Spammer oder seinen Bot, der eine URL auf deinem Server via GET aufrufen kann. Weltweit und unlimitiert mit voller Bandbreite deiner Serveranbindung -> Spamschleuder.

    .htaccess-Zugriffseinschränkungen sind nicht möglich, weil sonst die hübsche AJAX-Funktion nicht läuft.

    • @Robert: Request-Daten müssen validiert werden, so hatte ich mir mal angeeignet. Mit wp_mail() werden die Daten zwar validiert, ebenso mit dem JS des jQuery-Plugins, aber trotzdem kann jeder Bot den Parameter nutzen, korrekt ?

  4. Robert says:

    Richtig, das ist eines der offensichtlichen Probleme.

    Weiters verhindert Contactable nicht, dass innerhalb eines der via $_GET übermittelten Parameter ein Zeilenwechsel (\n) vorkommt. Damit eröffnet man böswilligen Kiddies ein paar weitere Möglichkeiten.

    Frickelei allerorten.

  5. Stefan says:

    Schaut doch mal hier nach. So kann man zumindest Contactables mail.php absichern.

  6. Ahmet Topal says:

    Die leichteste Möglichkeit ist es doch, einfach diesen $recipient im PHP Code festzulegen, dann kann man diesen Parameter nichtmehr ändern.

    Zwar muss man dann in der JavaScript Datei etwas ändern, aber ist minimal, also bei mir hat dies im test geklappt, spricht ja auch nichts dagegen.

    Hiermit wird die Email nur an den im $recipient festgelegten Benutzer gesendet.

  7. Ahmet Topal says:

    Irgentwie ist der Code nicht angekommen :)

    $recipient = "emailadresse@domain.tld";

  8. Alex says:

    Super, genau das was ich schon seit längerem suche... Allerdings funktioniert bei mir nischt. Ich habe ohne große eigene Anpassungen nach deiner Anleitung oben, das Formular zu starten versucht, aber es passiert nichts... Kein Button sichtbar.
    Habe schon versucht die Skripte direkt über den Header aufzuufen, alles fehlgeschlagen... Hast du ne Idee, wo ich noch suchen könnte?

    Das ganze liegt im Moment unter http://niederlassung.org/reservierung-anfragen/

    Vielen dank schonmal...

  9. Alex says:

    Hallo Frank,

    sorry, hab inzwischen was umgestellt. Es funktioniert inzwischen. Hatte einen kleinen Fehler in den Pfaden. Allerdings schickt er mir noch keine Mail raus. Und gibt es denn inzwischen ein sicheres Fixing wegen des oben angesprochenen Sicherheitsproblems...
    Aktuell auf niederlassung.org

    Vielen Dank für`s nachsehen...

    • @Moritz Graf: Eventuell solltest du mal den Autor des Blog ansehen, dass ist mein englischsprachiger Blog, den ich mit zwei Freunden betreibe ;)

  10. Moritz Graf says:

    Ohh man ich bin ein Idiot :DD Tut mir Leid...

© 2014, since 2005 bueltge.de [by:ltge.de] · Theme is built by ThemeShift