- Turnstile für Gäste und unbestätigte Konten (TurnstileVerifier, <x-turnstile>); ist Cloudflare nicht erreichbar, wird durchgelassen und im Verlauf, in der Kontakt-Queue und in der Betriebsüberwachung markiert - Inhaltsfilter des Kontaktformulars (fremde Links, Floskel mit Seitentitel, Zeichensalat, Sperrliste, Absenden unter 3 Sekunden); Treffer landen in der Spam-Quarantäne ohne Mail, Löschung nach 30 Tagen - Admin: Filter „Spam“, Sammelaktion, „Kein Spam“ holt die Mail nach - Registrierung lehnt Zufallsnamen ab; users:prune-bot-registrations (täglicher Lauf erst mit USERS_PRUNE_BOT_REGISTRATIONS=true) - contact-messages:quarantine-spam für den Altbestand - CSP erlaubt challenges.cloudflare.com, Log-Kanal spam - Datenschutzerklärung: Abschnitt 6a Cloudflare Turnstile (Vorschlag) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
29 lines
783 B
PHP
29 lines
783 B
PHP
<?php
|
|
|
|
namespace App\Services\Spam;
|
|
|
|
/**
|
|
* Hilfen für den Log-Kanal `spam`: nur Netz-Präfix statt voller IP, nie
|
|
* Inhalte — der Kanal zählt abgewiesene Anfragen, er archiviert sie nicht.
|
|
*/
|
|
final class SpamLog
|
|
{
|
|
public static function ipPrefix(?string $ip): ?string
|
|
{
|
|
if ($ip === null || $ip === '') {
|
|
return null;
|
|
}
|
|
|
|
if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {
|
|
return implode('.', array_slice(explode('.', $ip), 0, 3)).'.x';
|
|
}
|
|
|
|
if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) {
|
|
$expanded = explode(':', (string) inet_ntop((string) inet_pton($ip)));
|
|
|
|
return implode(':', array_slice($expanded, 0, 3)).'::/48';
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}
|