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.
|
* 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
|
* Der Hook-Handler unten ist eine zusaetzliche Absicherung ("defense in depth"), falls dieser fruehe
|
||||||
* Filter aus irgendeinem Grund nicht greift.
|
* 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
|
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
|
* Zusaetzliche Absicherung ueber HOOK_NEWSLETTER_PAGE_EMPFAENGEREINTRAGEN, falls die fruehe
|
||||||
* Pruefung in guardNewsletterSubmission() aus irgendeinem Grund nicht gegriffen hat.
|
* Pruefung in guardNewsletterSubmission() aus irgendeinem Grund nicht gegriffen hat.
|
||||||
|
|||||||
Reference in New Issue
Block a user