Hank: Spambots, CSRF token

Beitrag lesen

Nun, so lange ich nicht die gesamte Entscheidungsstruktur und die Bedingungen sehen kann, kann ich zwar nicht wirklich beurteilen, ob das „komisch“ ist, da aber ein Programm bei identischen Daten und Einstellungen immer gleich reagiert vermute ich, dass das weniger „komisch“ als viel mehr „zwingend“ ist.


// Prüfen, ob ein token bekannt ist
if(!isset($_SESSION['token'])) {
    $token = bin2hex(random_bytes(32)); // 32-byte CSRF-Token generieren
    $_SESSION['token'] = $token;
}

if($_POST['formsend']) {
    $name = $_POST['author'] ?? null;
    $email = $_POST['email'] ?? null;
    $subject = $_POST['phone'] ?? null;
    $emailmessage = $_POST['text'] ?? null;

    if(is_null($name) || $name == '') {
        $_POST['formsend'] = false;
        //Fehlermeldung
    } elseif(is_null($email) || filter_var($email,FILTER_VALIDATE_EMAIL) == false) {
        $_POST['formsend'] = false;
        //Fehlermeldung
    } elseif($_SESSION['token'] != $_POST['token']) {
        // Action if the token is not valid
        $_POST['formsend'] = false;
        $bot = 1;
        $meldung = 'Spambot - Token passt nicht';
        // Fehlermeldung
    } elseif($nur_ziffern_ausgefuellt) {
        $_POST['formsend'] = false;
        $bot = 1;
        $meldung = 'Spambot - Kein valides Subject';
        //Fehlermeldung
    }
    
    if($bot == 1) {
        // mail an mich senden, dass Bot am werk war
    }
}
if($_POST['formsend']) {
    // mails an mich und Ausfüller senden
} else {
    echo('	
			
            <div id="contact_form">
               <form method="post" name="contact" action=/kontakt>
                    <input type="hidden" name="token" value="'.$_SESSION['token'].'" />
                   <input type="hidden" name="formsend" value="true" />
                   <label for="author">Name:</label> 
                    <input type="text" id="author" name="author" class="required input_field" value="'.$name.'" />
                    <label for="email">Email:</label> 
                    <input type="text" id="email" name="email" class="validate-email required input_field" value="'.$email.'" />
                    
                    <label for="phone">Betreff:</label> 
                    <input type="text" name="phone" id="phone" class="input_field" value="'.$subject.'" />
    
                    <label for="text">Nachricht:</label> 
                    <textarea id="text" name="text" rows="0" cols="0" class="required">'.$emailmessage.'</textarea>
                    
                    <input type="submit" class="submit_btn" name="submit" id="submit" value="Send" />
                    
                </form>
            </div>     
            ');
}

Und die Emails, die mich erreichen, haben die Meldung:

Spambot - Kein valides Subject