Über PHPMailer werden immer wieder leere Mails zugestellt (BOT)

  • Hallo Gemeinde,

    ich habe bei netcup ein paar Domains.

    In einem habe ich ein Kontaktformular, welches mit PHPMailer die Nachricht an vorgegebene Adressen versenden soll und dies auch tut.

    Nun habe ich in den letzten Wochen das Problem, das ich immer wieder Mail bekomme, OHNE Inhalt (Name, Mailadresse, Text)

    Im Formular sind diese Felder alle als "required" markiert. Ich gehe davon aus, das dies durch einen BOT verursacht wird.

    Ich habe euch mal meine PHPMailer.php hier angehängt, evtl. hat ja jemand einen Tipp für mich, wie ich dies abstellen kann.

    Vielen Dank für eure Unterstützung

    Lieben Gruß Christopher

  • Im Formular sind diese Felder alle als "required" markiert.

    Meinst du damit, dass du im HTML required bei den Inputs gesetzt hast? Das reicht nicht aus. Damit gibst du nur den Browsern die Anweisung, dass die vor dem Absenden des Formulars überprüfen sollen, ob die Felder befüllt sind. Wenn ich jetzt aber den Request z.B. über CURL absende, ist da kein Browser, der das vorher checkt.

    Daher gilt: Niemals dem Client (Browser) vertrauen. Und immer schön im Backend nochmal prüfen.

    Du übernimmst einfach besucher_name, besucher_email und besucher_message aus $_REQUEST. Du überprüfst diese Felder aber an keiner Stelle richtig. Weder ob sie überhaupt gesetzt sind (isset/empty), noch ob überhaupt sinnvolles Zeug drin steht (z.B. E-Mail-Adresse validieren).

    In der Funktion checkemail müsstest du $spamcheck auch als global definieren. Besser wäre aber, wenn die Funktion einfach einen Rückgabewert hätte.

    Und natürlich noch das, was nitram sagt.

    Dieses Gebäude hat mir die Vorfahrt genommen! *hup*

  • Hallo Ihr beiden,

    erst mal Danke für eure Rückmedungen.

    Ich werde mir dies anschauen und versuchen umzusetzen.

    Habe mir die Links mal angesehen, verstehe aber z.B. nicht warum eine Variable welche der Wert ='' zugewiesen wird als gesetzt (nicht leer) ausgewertet wird.

    Offensichtlich kann eine Variable nur mit "unset" gelöscht/geleert werden.

    Code
    $var = '';
    // Dieser Ausdruck wird zu TRUE ausgewertet, also wird der Text angezeigt
    if (isset($var)) {
        echo "Die Variable ist gesetzt, also wird etwas ausgegeben.";
    }

    Muss dann mal schauen, ob ich ein Beispiel finde, auf welches ich aufsetzen kann.

  • EIn String der Länge 0 oder ein Integer 0 ist halt nicht NULL

    In php 9 ist es geplant, neben NULL, noch eine weitere Größe einzuführen, die zwar ähnlich wie NULL, effektiv nichts ist, aber trotzdem erratisch und unvorhersehbar alle möglichen Werte annehmen kann und zwar TRUMP

  • Habe mir die Links mal angesehen, verstehe aber z.B. nicht warum eine Variable welche der Wert ='' zugewiesen wird als gesetzt (nicht leer) ausgewertet wird.

    isset prüft nur die Existenz einer Variable, bzw. bei den $_POST und $_REQUEST Arrays ob ein bestimmter Key / Index vorhanden ist - dieser kann aber trotzdem ein leerer String sein.

    Das benutzt man, damit du beim Zugriff auf eine ungesetzte Variable keinen Fehler bekommst.

    Wenn der Key verfügbar ist, willst du nach deinen Anforderungen aber trotzdem prüfen, ob diese a) ein String ist und b) ob der String lang genug ist. Das kann man mit dem Vergleich auf einen leeren String lösen, oder mit einer Längenprüfung, oder mit empty().

    Bestenfalls kombiniert man also isset mit empty.

    Die Beispiele zeigen hier die Verwendung mit einer Variable, wie bereits erwähnt, ist $_POST, $_REQUEST und auch $_SESSION keine einfache Variable, sondern ein Array und ist daher anders zu behandeln.