Auto-commit: 2026-05-20 21:35

This commit is contained in:
OpenClaw
2026-05-20 21:35:47 +00:00
parent 382b0a76d2
commit d8db022c65
93 changed files with 1105 additions and 7542 deletions

View File

@@ -0,0 +1,110 @@
# Issue #34 Kontaktformular: E-Mail-Versand via PHP
- **Repo:** `greggy/landingpage-haus-schleusingen`
- **Issue:** #34
- **Titel:** Kontaktformular: E-Mail-Versand via PHP
- **Komplexität:** **M**
- **Stand:** Analyse abgeschlossen
- **Datum:** 2026-05-14
## Kurzbewertung
Das Issue ist **Medium (M)**: Es ist kein großer Architekturumbau, aber es ist mehr als ein kleiner Bugfix, weil serverseitige PHP-Logik, Spam-Schutz, Validierung, sichere Header-Behandlung und UI-Feedback zusammen umgesetzt werden müssen.
## Abhängigkeiten
- **Keine blockierenden offenen Issues gefunden.**
- `index.php` existiert bereits auf `main` und ist die richtige Basis für die PHP-Umsetzung.
- Hinweis: Das bestehende Docker/Nginx-Setup dient weiter als statisches Preview, verarbeitet aber kein PHP-Mail-Handling. Für den echten Versand ist eine PHP-fähige Laufzeit nötig (Testumgebung: Apache/PHP).
## Anforderungen aus dem Issue
1. Kontaktformular verschickt E-Mails serverseitig via PHP.
2. Empfänger ist `mki@kies-media.de`.
3. Absender (`From`) ist die E-Mail-Adresse aus dem Formular.
4. Pflichtfeld-Validierung für Name, E-Mail und Nachricht.
5. Spam-Schutz via Honeypot und zusätzlicher Missbrauchsschutz.
6. Erfolgsmeldung nach erfolgreichem Versand.
7. Verständliche Fehlermeldungen bei ungültigen oder fehlenden Eingaben.
## Implizite Anforderungen / Edge Cases
- Header-Injection über Name/E-Mail darf nicht möglich sein.
- Ungültige E-Mail-Adressen müssen serverseitig abgelehnt werden.
- Leere oder nur aus Leerzeichen bestehende Nachrichten müssen abgelehnt werden.
- Bots sollen am Honeypot scheitern.
- Sehr schnelle Direkt-Submits sollen als verdächtig behandelt werden.
- Mehrfach-Submits in kurzer Zeit sollen begrenzt werden.
- Bei Mail-Fehlern darf kein falscher Erfolg angezeigt werden.
- Formulardaten sollen bei Validierungsfehlern im Formular erhalten bleiben.
## Technischer Plan
### Backend / PHP
- `index.php` bekommt einen serverseitigen POST-Handler.
- `session_start()` wird verwendet für:
- Formular-Timestamp
- einfaches Rate-Limit zwischen Submits
- Hilfsfunktionen:
- `normalizeContactValue()` für Trim/Sanitizing
- `escapeContactValue()` für sichere Ausgabe ins HTML
- `containsHeaderInjection()` für Header-Schutz
- Versand über `mail()` mit Headern:
- `From: <Formular-E-Mail>`
- `Reply-To: <Formular-E-Mail>`
- `Content-Type: text/plain; charset=UTF-8`
- Bei Erfolg: Formular leeren und Erfolgsmeldung rendern.
- Bei Fehlern: Fehlerliste oberhalb des Formulars rendern.
### Frontend / HTML
- Formular auf `method="post"` umstellen.
- Honeypot-Feld ergänzen (visuell versteckt, für Screenreader ebenfalls ausgeschlossen).
- Hidden-Feld für Formular-Token/Timestamp ergänzen.
- Bestehende Erfolgsmeldung auf serverseitig gesteuerten Zustand umbauen.
- Pflichtfelder klar markieren und `required` beibehalten.
### Frontend / JS
- Bestehende `mailto:`-Logik entfernen.
- Sonstige Interaktionen (Lightbox, Navigation, Scroll) unverändert lassen.
### Styling
- Styles für:
- Fehlermeldungsbox
- serverseitige Erfolgsmeldung
- Honeypot-Hilfsklasse
## Sicherheitsbetrachtung
- Pflicht: serverseitige Validierung, nicht nur HTML5.
- Pflicht: Schutz vor Header-Injection in Mail-Headern.
- Pflicht: Honeypot leer + Mindestzeit bis Submit + Session-Rate-Limit.
- Keine sensiblen Daten in Logs oder im Frontend ausgeben.
## Teilaufgaben
1. `main`-Stand prüfen und Feature-Branch anlegen.
2. `index.php` serverseitig auf POST/Mailversand umbauen.
3. Formular um Honeypot, Hidden-Felder, Fehler-/Erfolgsausgabe ergänzen.
4. `js/haus-schleusingen.js` von `mailto:`-Submit befreien.
5. CSS für Meldungszustände ergänzen.
6. Linting / Formatierung / PHP-Syntaxcheck ausführen.
7. Self-Review dokumentieren.
8. QA inkl. Happy Path, Validierungsfehler und Spam-Schutz dokumentieren.
9. PR erstellen und Martin zur Freigabe vorlegen.
## Akzeptanzkriterien
- [ ] Formular sendet serverseitig eine E-Mail an `mki@kies-media.de`.
- [ ] `From` verwendet die eingegebene Formular-E-Mail.
- [ ] E-Mail enthält Name, E-Mail, optional Telefon, Anliegen und Nachricht.
- [ ] Honeypot + zusätzlicher Missbrauchsschutz aktiv.
- [ ] Erfolgsmeldung nach erfolgreichem Versand sichtbar.
- [ ] Fehlermeldungen bei fehlenden/ungültigen Pflichtfeldern sichtbar.
## Architekturentscheidung
Es wird bewusst **kein** SMTP-Layer oder externer Mailer eingebaut, weil das Issue explizit `mail()` erlaubt und für dieses Projekt eine schlanke, servernahe Lösung genügt. Falls Zustellbarkeit oder Hosting-Limits später Probleme machen, wäre ein Folge-Issue für SMTP/PHPMailer sinnvoll.