Kontaktformular-Schutz hinzugefuegt (v1.1.0)
This commit is contained in:
@@ -21,6 +21,12 @@ use Plugin\fp_altcha_spamschutz\src\Service\AltchaService;
|
||||
* wird das POST-Feld "abonnieren" entfernt, sodass JTL-Shop die Anmeldung erst gar nicht verarbeitet.
|
||||
* Der Hook-Handler unten ist eine zusaetzliche Absicherung ("defense in depth"), falls dieser fruehe
|
||||
* Filter aus irgendeinem Grund nicht greift.
|
||||
*
|
||||
* Kontaktformular: der dafuer vorgesehene Hook (HOOK_KONTAKT_PAGE_PLAUSI) ist offiziell nicht
|
||||
* dokumentiert (keine Angaben zu den uebergebenen Parametern). Um sich nicht auf ungeprueftes
|
||||
* Verhalten zu verlassen, wird hier bewusst derselbe fruehe, hook-unabhaengige Ansatz wie bei der
|
||||
* Newsletter-Anmeldung verwendet: direkte Pruefung von $_POST, noch bevor JTL-Shop das Formular
|
||||
* verarbeitet (siehe guardContactSubmission()).
|
||||
*/
|
||||
class ValidationHandler
|
||||
{
|
||||
@@ -98,6 +104,41 @@ class ValidationHandler
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Fruehe Pruefung fuer das Kontaktformular. Wird direkt aus Bootstrap::boot() aufgerufen, nach
|
||||
* demselben Muster wie guardNewsletterSubmission(). Das Formular sendet ein verstecktes Feld
|
||||
* "kontakt" mit dem Wert "1" mit, das als zuverlaessiges Erkennungsmerkmal dient.
|
||||
*/
|
||||
public function guardContactSubmission(): void
|
||||
{
|
||||
try {
|
||||
if (!$this->altchaService->isEnabledForContact()) {
|
||||
return;
|
||||
}
|
||||
|
||||
$isContactSubmit = ($_SERVER['REQUEST_METHOD'] ?? '') === 'POST'
|
||||
&& isset($_POST['kontakt']);
|
||||
|
||||
if (!$isContactSubmit) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ($this->altchaService->verifyPost()) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Pflichtfeld leeren, damit JTL-Shops eigene Pruefung ("Pflichtfeld nicht ausgefuellt")
|
||||
// die Anfrage abweist -- der Besucher bekommt die normale, vertraute Fehlermeldung.
|
||||
unset($_POST['nachricht']);
|
||||
} catch (\Throwable $e) {
|
||||
// Wird direkt in Bootstrap::boot() aufgerufen (nicht ueber einen Hook) -- ein
|
||||
// Fehler hier darf auf keinen Fall den kompletten Seitenaufbau verhindern.
|
||||
if ($this->altchaService->isDebug()) {
|
||||
error_log('[fp_altcha_spamschutz] Fehler bei Kontakt-Fruehpruefung: ' . $e->getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Zusaetzliche Absicherung ueber HOOK_NEWSLETTER_PAGE_EMPFAENGEREINTRAGEN, falls die fruehe
|
||||
* Pruefung in guardNewsletterSubmission() aus irgendeinem Grund nicht gegriffen hat.
|
||||
|
||||
Reference in New Issue
Block a user