Jetzt Kontakt aufnehmen
Ein sicheres Kontaktformular mit HTML, PHP, AJAX und CSRF-Schutz

Ein sicheres Kontaktformular mit HTML, PHP, AJAX und CSRF-Schutz

Ein Kontaktformular ist ein essenzieller Bestandteil jeder Website. In diesem Artikel zeigen wir, wie man ein sicheres Kontaktformular mit HTML, PHP und AJAX erstellt und es mit einem CSRF-Token schützt, um Sicherheitslücken zu vermeiden.

Kontakt-Button
Nehmen Sie Kontakt auf

Wir sind für Sie erreichbar.

Jetzt Gespräch suchen
Von
  • Webentwicklung
  • Inspiration

HTML-Formular

<form id="contact-form">
    <input type="hidden" id="csrf_token" name="csrf_token" value="">
    <label for="name">Name:</label>
    <input type="text" id="name" name="name" required>
    
    <label for="email">E-Mail:</label>
    <input type="email" id="email" name="email" required>
    
    <label for="message">Nachricht:</label>
    <textarea id="message" name="message" required></textarea>
    
    <button type="submit">Senden</button>
</form>
<p id="response"></p>

Wir erstellen ein einfaches HTML-Formular.

Kontakt-Button
Können wir Ihnen behilflich sein?

Wir unterstützen Sie gerne!

Jetzt kontaktieren
CSRF-Token

CSRF-Token generieren und in die Session speichern

<?php
session_start();
if (empty($_SESSION['csrf_token'])) {
    $_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}
echo json_encode(["csrf_token" => $_SESSION['csrf_token']]);

Wir fügen diesen Code in eine PHP-Datei (csrf_token.php), um ein CSRF-Token zu generieren.

document.addEventListener("DOMContentLoaded", function () {
    fetch("csrf_token.php")
        .then(response => response.json())
        .then(data => {
            document.getElementById("csrf_token").value = data.csrf_token;
        });
});

Dann laden wir den Token beim Laden der Seite über JavaScript.

Kontakt-Button
Wie können wir Ihnen helfen?

Unsere Dienstleistungen decken alle Bereiche der digitalen Kommunikation.

Schreiben Sie uns

AJAX-Code

AJAX-Code für das Absenden des Formulars

document.getElementById("contact-form").addEventListener("submit", function (e) {
    e.preventDefault();

    let formData = new FormData(this);

    fetch("process_form.php", {
        method: "POST",
        body: formData
    })
    .then(response => response.json())
    .then(data => {
        document.getElementById("response").textContent = data.message;
    })
    .catch(error => console.error("Fehler:", error));
});

Nun fügen wir ein Skript hinzu, das das Formular per AJAX an die process_form.php sendet.

Kontakt-Button
Wir sind für Sie erreichbar!

Schreiben Sie uns oder rufen Sie an.

Jetzt Kontakt aufnehmen
PHP

PHP-Backend mit CSRF-Schutz und E-Mail-Versand

<?php
session_start();
header("Content-Type: application/json");

if ($_SERVER["REQUEST_METHOD"] !== "POST") {
    echo json_encode(["message" => "Ungültige Anfrage"]);
    exit;
}

if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) {
    echo json_encode(["message" => "CSRF-Überprüfung fehlgeschlagen"]);
    exit;
}

$name = filter_var($_POST['name'], FILTER_SANITIZE_STRING);
$email = filter_var($_POST['email'], FILTER_SANITIZE_EMAIL);
$message = filter_var($_POST['message'], FILTER_SANITIZE_STRING);

if (empty($name) || empty($email) || empty($message)) {
    echo json_encode(["message" => "Bitte alle Felder ausfüllen"]);
    exit;
}

$to = "deine-email@example.com";
$subject = "Neue Nachricht von $name";
$headers = "From: $email\r\nReply-To: $email\r\nContent-Type: text/plain; charset=UTF-8";

$mailSent = mail($to, $subject, $message, $headers);

if ($mailSent) {
    echo json_encode(["message" => "Nachricht erfolgreich gesendet!"]);
} else {
    echo json_encode(["message" => "Fehler beim Senden der Nachricht"]);
}

Hier ist der Code für process_form.php, um das Formular zu verarbeiten und die Nachricht zu versenden.

Kontakt-Button
Nehmen Sie Kontakt auf

Wir sind für Sie erreichbar.

Jetzt Gespräch suchen
reCAPTCHA

Google reCAPTCHA ist eine der besten Methoden, um Spam-Bots zu blockieren.

Wir benötigen einen API-Schlüssel von Google reCAPTCHA

<script src="https://www.google.com/recaptcha/api.js" async defer></script>

<form id="contact-form">
    <input type="hidden" id="csrf_token" name="csrf_token" value="">
    <label for="name">Name:</label>
    <input type="text" id="name" name="name" required>
    
    <label for="email">E-Mail:</label>
    <input type="email" id="email" name="email" required>
    
    <label for="message">Nachricht:</label>
    <textarea id="message" name="message" required></textarea>
    
    <div class="g-recaptcha" data-sitekey="DEIN_SITE_KEY"></div>
    
    <button type="submit">Senden</button>
</form>

Wir ergänzen das reCAPTCHA-Skript im HTML-Formular.

$recaptchaSecret = "DEIN_SECRET_KEY";
$recaptchaResponse = $_POST['g-recaptcha-response'];

$verifyResponse = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret={$recaptchaSecret}&response={$recaptchaResponse}");
$responseData = json_decode($verifyResponse);

if (!$responseData->success) {
    echo json_encode(["message" => "Bitte reCAPTCHA bestätigen"]);
    exit;
}

Wir überprüfen den reCAPTCHA-Token in process_form.php.

Kontakt-Button
Wie können wir Ihnen helfen?

Unsere Dienstleistungen decken alle Bereiche der digitalen Kommunikation.

Schreiben Sie uns
Honeypot

Ein verstecktes Eingabefeld hinzufügen, das nur Bots ausfüllen, aber für echte Nutzer unsichtbar ist.

<input type="text" name="honeypot" style="display:none;">

Wir ergänzen ein verstecktes Eingabefeld im HTML-Formular.

if (!empty($_POST['honeypot'])) {
    echo json_encode(["message" => "Spam erkannt!"]);
    exit;
}

Wir überprüfen Honeypot in process_form.php.

Kontakt-Button
Können wir Ihnen behilflich sein?

Wir unterstützen Sie gerne!

Jetzt kontaktieren

Zeitbasierte Validierung

Beim Laden des Formulars einen Zeitstempel in der Session speichern und überprüfen, ob das Formular in einer realistischen Zeit ausgefüllt wurde.

session_start();
$_SESSION['form_time'] = time();

Wir starten die zeitbasierte Validierung in csrf_token.php.

if (time() - $_SESSION['form_time'] < 5) {
    echo json_encode(["message" => "Zu schnell ausgefüllt, verdächtige Anfrage!"]);
    exit;
}

Wir überprüfen die zeitbasierte Validierung in process_form.php.

Kontakt-Button
Wir sind für Sie erreichbar!

Schreiben Sie uns oder rufen Sie an.

Jetzt Kontakt aufnehmen

Schlusswort: Mit diesem Setup zum sicheren und modernen Kontaktformular

Mit diesem Setup hat man ein sicheres und modernes Kontaktformular, das AJAX nutzt, um die Seite nicht neu zu laden, und CSRF-Schutz, um Angriffe zu verhindern. So wird sichergestellt, dass ein Kontaktformular zuverlässig und geschützt arbeitet.

Kontakt-Button
Wir sind für Sie erreichbar!

Schreiben Sie uns oder rufen Sie an.

Jetzt Kontakt aufnehmen

Warum ist ein CSRF-Token wichtig?

Ein CSRF-Token verhindert Cross-Site Request Forgery (CSRF)-Angriffe, indem es sicherstellt, dass nur autorisierte Anfragen akzeptiert werden.

Kann ich das Formular ohne JavaScript nutzen?

Ja, aber ohne JavaScript wird die Seite beim Absenden neu geladen. Das Formular kann auch mit einem klassischen PHP-POST-Request verarbeitet werden.

Warum wird meine E-Mail nicht gesendet?

Überprüfe, ob der Server die mail()-Funktion unterstützt. Alternativ kann PHPMailer verwendet werden.

Kontakt-Button
Wie können wir Ihnen helfen?

Unsere Dienstleistungen decken alle Bereiche der digitalen Kommunikation.

Schreiben Sie uns
Wie kann ich das Formular weiter anpassen?

Zusätzliche Felder hinzufügen, das Styling mit CSS verbessern oder die Datenbankintegration einbauen.

Ist das Formular vor Spam geschützt?

Dieses Beispiel enthält keinen Spam-Schutz. Im Artikel wird erklärt, wie Spam-Schutz hinzugefügt werden kann.

Kann ich mehrere Formulare auf einer Seite haben?

Ja, aber jedes Formular benötigt sein eigenes CSRF-Token oder man muss den Token für alle Formulare verfügbar machen.

Kontakt-Button
Wie können wir Ihnen helfen?

Unsere Dienstleistungen decken alle Bereiche der digitalen Kommunikation.

Schreiben Sie uns
weedesign Blog

Shopware vs. WooCommerce - Vergleich von E-Commerce-Plattformen

Shopware ist ein komplettes Shopsystem, das speziell für den E-Commerce entwickelt wurde. Die Software bietet eine Vielzahl von Funktionen und kann auf individuelle Anforderungen angepasst werden. WooCommerce hingegen ist ein Plugin für das Content-Management-System WordPress und richtet sich vor allem an kleinere Online-Shops.

Zum Blog-Eintrag

Dropshipping im Jahr 2025: Weiterhin profitabel oder nicht mehr lohnend?

Dropshipping hat sich in den letzten Jahren zu einem beliebten E-Commerce-Geschäftsmodell entwickelt. Durch die direkte Lieferung von Produkten von einem Drittanbieter zum Endkunden wird die Notwendigkeit des Lagerungs- und Versandprozesses eliminiert. Doch ist Dropshipping noch immer profitabel im Jahr 2025?

Zum Blog-Eintrag

Maximieren Sie den Nutzen von Email-Marketing für Ihr Unternehmen

Holen Sie sich Tipps, wie Sie eine starke Email-Marketing-Strategie entwickeln, um Ihre Kundenbindung zu stärken, Ihre Umsätze zu steigern und Ihre Online-Präsenz aufzubauen. Von der Erstellung einer E-Mail-Liste bis hin zur Messung der Leistung Ihrer Kampagnen - wir decken alle wichtigen Aspekte ab, die für ein erfolgreiches Email-Marketing entscheidend sind.

Zum Blog-Eintrag
Auf der Suche nach Shopware-Erweiterungen?
Hier sind unsere Bestseller!
Erweiterter Editor | WYSIWYG

Erweiterter Editor | WYSIWYG

Nutze den erweiterten WYSIWYG-Editor in Shopware 6. Dieser Editor ermöglicht die einfache Einbettung von Medien in die Beschreibung und viele weitere Features.

ab 9,17 €* / Monat

PageSpeed optimieren
PageSpeed optimieren

Optimieren Sie Ihren Shop und schaffen Sie damit ein besseres Erlebnis für Ihre Kunden. Dieses Plugin minimiert die Ladezeit Ihres Shops und bietet zahlreiche Konfigurationen.

ab 24,17 €* / Monat

Twig Manager
Twig Manager

Erstellen und bearbeiten Sie Ihre eigenen Template-Erweiterungen schnell und einfach in der Administration. Anzeige vorhandener Storefront-Vorlagenpfade und -Inhalte.

ab 3,33 €* / Monat

Hinweis: * Alle Preise verstehen sich zzgl. Mehrwertsteuer

x