PHPackages                             con2net/contao-anti-spam-form-bundle - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Security](/categories/security)
4. /
5. con2net/contao-anti-spam-form-bundle

ActiveContao-bundle[Security](/categories/security)

con2net/contao-anti-spam-form-bundle
====================================

Umfassendes Anti-SPAM Bundle für Contao Formulare mit ALTCHA Captcha, IP-Blacklist, Content-Analyse und Multi-Layer-Schutz

1.0.3(4mo ago)5346↑33.3%[5 issues](https://github.com/con2net/contao-anti-spam-form-bundle/issues)MITPHPPHP ^8.2

Since Nov 27Pushed 4mo ago1 watchersCompare

[ Source](https://github.com/con2net/contao-anti-spam-form-bundle)[ Packagist](https://packagist.org/packages/con2net/contao-anti-spam-form-bundle)[ RSS](/packages/con2net-contao-anti-spam-form-bundle/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependencies (3)Versions (5)Used By (0)

Contao Anti-SPAM Form Bundle
============================

[](#contao-anti-spam-form-bundle)

Ein umfassendes Anti-SPAM Bundle für Contao Formulare mit Multi-Layer-Schutz.

---

Wichtiger Hinweis / Disclaimer
------------------------------

[](#wichtiger-hinweis--disclaimer)

Dieses Bundle bietet umfangreiche SPAM-Schutz-Mechanismen, kann aber **keine 100%ige SPAM-Erkennung garantieren**.

**Bitte beachte:**

- **False-Positives sind möglich:** Legitime Anfragen können fälschlicherweise als SPAM erkannt werden
- **SPAM-Bots entwickeln sich weiter:** Die Wirksamkeit einzelner Checks kann mit der Zeit abnehmen
- **Regelmäßige Anpassung nötig:** Schwellwerte und Filter sollten überwacht und ggf. nachjustiert werden
- **Kein Anspruch auf Fehlerfreiheit:** Das Bundle wird ohne Gewährleistung bereitgestellt
- **Keine Haftung:** Für entgangene Anfragen oder Datenverluste wird keine Haftung übernommen

**Empfehlung:** Teste das Bundle ausführlich in einer Staging-Umgebung, bevor du es produktiv einsetzt. Überwache die Logs regelmäßig und passe die Einstellungen an deine Bedürfnisse an.

---

Features
--------

[](#features)

### Multi-Layer SPAM-Schutz

[](#multi-layer-spam-schutz)

Das Bundle kombiniert **7 verschiedene Schutzebenen**, die einzeln aktiviert und konfiguriert werden können:

1. **ALTCHA Captcha** - Modernes, barrierefreies Captcha ohne Tracking
2. **IP-Blacklist** - Prüfung gegen StopForumSpam.com Datenbank
3. **E-Mail-Blacklist** - Erkennung bekannter SPAM-E-Mail-Adressen
4. **Content-Analyse** - 7 intelligente Pattern-Checks (URLs, Sonderzeichen, etc.)
5. **Honeypot-Felder** - Unsichtbare Fallen für Bots (3 Varianten)
6. **Zeit-basierte Validierung** - Erkennung zu schneller/langsamer Submits
7. **JavaScript-Token** - Überprüfung ob JavaScript aktiv ist

### Highlights

[](#highlights)

- **Feldbasierte Content-Analyse** - Wähle für jeden Test die zu prüfenden Felder aus
- **Score-basiertes System** - Konfigurierbare Schwellwerte für flexible SPAM-Erkennung
- **DSGVO-konform** - Keine externen Tracking-Skripte, Daten bleiben auf dem Server
- **Fehler-tolerant** - API-Ausfälle brechen Formular-Submits nicht ab
- **Debug-Modus** - Ausführliche Logs für Entwickler
- **Kompatibel** - Funktioniert mit Notification Center, Standard-Mails, etc.

---

Installation
------------

[](#installation)

### Via Composer (empfohlen)

[](#via-composer-empfohlen)

```
composer require con2net/contao-anti-spam-form-bundle
```

### Via Contao Manager

[](#via-contao-manager)

1. Contao Manager öffnen
2. Nach "con2net/contao-anti-spam-form-bundle" suchen
3. Bundle installieren
4. Datenbank aktualisieren

---

Konfiguration
-------------

[](#konfiguration)

### 1. ALTCHA HMAC-Key generieren

[](#1-altcha-hmac-key-generieren)

Der HMAC-Key ist essentiell für die ALTCHA Challenge-Erstellung und **muss** geheim bleiben!

**Key generieren (Linux/Mac):**

```
openssl rand -base64 32
```

**Key generieren (Windows PowerShell):**

```
$bytes = New-Object byte[] 32
[System.Security.Cryptography.RNGCryptoServiceProvider]::Create().GetBytes($bytes)
[Convert]::ToBase64String($bytes)
```

**Ausgabe z.B.:** `K8vJ9mNpQ2xRzT4yH6wL3eFgD1sA5bC7oU0iM9nV2kX=`

### 2. Key in .env.local Datei anlegen

[](#2-key-in-envlocal-datei-anlegen)

Ergänze in der`.env.local` Datei im Root-Verzeichnis deiner Contao-Installation:

```
###> con2net/contao-anti-spam-form-bundle ###
ALTCHA_HMAC_KEY="DEIN-GENERIERTER-KEY-HIER"
###< con2net/contao-anti-spam-form-bundle ###
```

Hinweis: Solltest du noch keine .env.local Datei haben, lege diese bitte an. Lege in diesem Fall auch eine (leere) .env Datei direkt daneben ins Root-Verzeichnis Deiner Contao-Installation.

### 3. ALTCHA Konfiguration (Optional)

[](#3-altcha-konfiguration-optional)

### Standard-Werte (ohne config.yml)

[](#standard-werte-ohne-configyml)

Das Bundle funktioniert **ohne zusätzliche Konfiguration** mit folgenden Default-Werten:

```
# Diese Werte werden automatisch verwendet, wenn keine config.yml vorhanden ist:
ALTCHA:
  max_number: 100000     # Medium Difficulty (gut für die meisten Websites)
  salt_length: 16        # 128 Bit Entropie (empfohlener Sicherheitsstandard)
  algorithm: 'SHA-256'   # Schnell und sicher
```

Eigene Werte konfigurieren (optional)
-------------------------------------

[](#eigene-werte-konfigurieren-optional)

Falls du die ALTCHA-Schwierigkeit anpassen möchtest, kannst du optional diese Konfiguration in deine `config/config.yml` einfügen:

```
# config/config.yml
contao_anti_spam_form:
  altcha:
    # Challenge difficulty (höher = schwerer für Bots, langsamer für User)
    # Easy: 10000, Normal: 50000, Medium: 100000, Hard: 250000, Very Hard: 500000
    max_number: 100000

    # Salt length (8-32)
    # 16 = 128 Bit Entropie (empfohlen für CAPTCHA)
    salt_length: 16

    # Hash algorithm: SHA-256 (fast), SHA-384 (medium), SHA-512 (secure)
    algorithm: 'SHA-256'
```

Schwierigkeitsgrade in etwa
---------------------------

[](#schwierigkeitsgrade-in-etwa)

max\_numberSchwierigkeitDurchschnittliche LösungszeitEmpfohlen für10.000Very Easy&lt; 1 SekundeTesting50.000Easy1-2 SekundenHoher Traffic / Mobile100.000Medium2-4 SekundenStandard-Websites ⭐250.000Hard5-10 SekundenHochsichere Formulare500.000Very Hard10-20 SekundenMaximale SicherheitIP-Blacklist Konfiguration
--------------------------

[](#ip-blacklist-konfiguration)

Die IP-Blacklist (StopForumSpam.com) funktioniert ebenfalls mit Defaults. Optional kannst du konfigurieren:

```
contao_anti_spam_form:
  ip_blacklist:
    cache_lifetime: 86400   # 24h Cache für API-Anfragen
    api_timeout: 3          # 3s Timeout für StopForumSpam API
    whitelist:
      - '127.0.0.1'         # Localhost immer erlauben
      - '192.168.1.0/24'    # Lokales Netzwerk
      # - '10.0.0.0/8'      # Firmen-VPN (Beispiel)
```

HMAC Key (erforderlich für Production)
--------------------------------------

[](#hmac-key-erforderlich-für-production)

**Der HMAC Key MUSS manuell gesetzt werden:**

```
# .env.local
ALTCHA_HMAC_KEY=dein-geheimer-hmac-key-hier
```

Den Key generierst du mit:

```
php -r "echo bin2hex(random_bytes(32));"
```

**Wichtig:** Der HMAC Key ist das einzige, was du zwingend konfigurieren musst. Alles andere hat Defaults!

### 4. Datenbank aktualisieren

[](#4-datenbank-aktualisieren)

```
# Via Console
php vendor/bin/contao-console contao:migrate

# ODER via Contao Manager
https://deine-domain.de/contao-manager.phar.php
```

---

Verwendung
----------

[](#verwendung)

### Formular erstellen

[](#formular-erstellen)

1. **Backend → Formulare → Neues Formular**
2. Füge deine Formularfelder hinzu (E-Mail, Name, Nachricht, etc.)
3. Aktiviere den Anti-SPAM Schutz

### Anti-SPAM aktivieren

[](#anti-spam-aktivieren)

**Backend → Formulare → \[Dein Formular\]**

Scrolle zur Sektion **"Anti-SPAM Schutz"** und aktiviere die gewünschten Features.

#### Basis-Einstellungen

[](#basis-einstellungen)

- **Anti-SPAM Schutz aktivieren** - Hauptschalter für alle Schutzfunktionen
- **Minimale Absende-Zeit** - Formulare schneller als X Sek. = SPAM (z.B. 10 Sek.)
- **Maximale Absende-Zeit** - Formulare langsamer als X Sek. = SPAM (z.B. 300 Sek. oder 0 für unbegrenzt)
- **SPAM-Markierung** - Text für `##form_spam_marker##` Variable (z.B. `*** SPAM *** `)
- **SPAM-Nachrichten nicht senden** - SPAM-E-Mails komplett blockieren (statt nur markieren)

#### Erweiterte Features

[](#erweiterte-features)

- **ALTCHA Captcha aktivieren** - Barrierefreies Captcha (benötigt ALTCHA-Formularfeld!)
- **IP-Blacklist Check aktivieren** - Prüfung gegen StopForumSpam.com
- **Debug-Modus aktivieren** - Ausführliche Logs (für Troubleshooting/Analyse)

### Content-Analyse konfigurieren

[](#content-analyse-konfigurieren)

**Backend → Formulare → \[Dein Formular\] → Content-Analyse**

Die Content-Analyse bietet **7 intelligente Tests**, die für jedes Formular-Feld einzeln aktiviert werden können:

#### 1. URLs im Text prüfen

[](#1-urls-im-text-prüfen)

Erkennt Links in Nachrichtenfeldern (sehr viel SPAM enthält URLs).

- **Score:** 50 Punkte (Standard)
- **Felder wählen:** Empfiehlt sich für Nachrichtenfelder o.ä.

#### 2. Nur Sonderzeichen prüfen

[](#2-nur-sonderzeichen-prüfen)

Erkennt Nachrichten wie `!!!###$$$`.

- **Score:** 40 Punkte
- **Felder wählen:** Name, Nachricht, Betreff

#### 3. Tempmail-Adressen prüfen

[](#3-tempmail-adressen-prüfen)

Erkennt Wegwerf-E-Mail-Adressen (10minutemail.com, etc.).

- **Score:** 30 Punkte
- **Domains:** Vordefinierte Liste (erweiterbar)

#### 4. Nachricht zu kurz prüfen

[](#4-nachricht-zu-kurz-prüfen)

Erkennt zu kurze Nachrichten wie "test", "hi".

- **Score:** 25 Punkte
- **Mindestlänge:** 10 Zeichen (Standard)
- **Felder wählen:** NUR große Textfelder (Textarea), Eher NICHT Vorname o.ä.!

#### 5. Repetitive Zeichen prüfen

[](#5-repetitive-zeichen-prüfen)

Erkennt Wiederholungen wie `aaaaaaa`, `!!!!!!`.

- **Score:** 20 Punkte
- **Felder wählen:** Alle Textfelder

#### 6. Großbuchstaben prüfen

[](#6-großbuchstaben-prüfen)

Erkennt übermäßig viele Großbuchstaben (`HELLO THIS IS IMPORTANT!!!`).

- **Score:** 15 Punkte
- **Max. Anteil:** 60% (Standard)
- **Felder wählen:** NICHT Länder-/Code-Felder (DE, ES, etc.)!

#### 7. SPAM-Keywords prüfen

[](#7-spam-keywords-prüfen)

Sucht nach typischen SPAM-Wörtern.

- **Score:** 10 Punkte pro Keyword (max. 30)
- **Keywords:** Anpassbar (Standard: viagra, casino, crypto, etc.)
- **ACHTUNG:** Kann zu False-Positives führen! Nur aktivieren wenn sorgfältig konfiguriert.

#### Score-System

[](#score-system)

- **SPAM-Schwellwert:** 50 Punkte (Standard)
- Jeder Test addiert Punkte
- Ab Schwellwert = SPAM erkannt
- **Empfehlung:** Beginne mit 50, passe nach Bedarf an (höher = strenger)

### Honeypot-Felder hinzufügen

[](#honeypot-felder-hinzufügen)

**Backend → Formulare → \[Dein Formular\] → Neues Formularfeld**

Wähle einen der 3 Honeypot-Typen:

1. **Honeypot (Text)** - Getarntes Textfeld
2. **Honeypot (Textarea)** - Getarntes Nachrichtenfeld
3. **Honeypot (Checkbox)** - Getarnte Checkbox

**Feldname:** Beliebig (z.B. `local_office_address`, `business_role`)

Empfehlenswert sind Feldnamen, die eine gewisse Verlockung auf Bots ausüben. Nicht zu "üblich" da ggf. AutoComplete-Mechanismen bei echten Clients dazu führen, dass das Feld dann trotzdem ausgefüllt wird.

**Empfohlene Labels (unauffällig):**

- "Position" / "Business Role"
- "Zusätzliche Informationen"
- "Newsletter abonnieren"

### ALTCHA-Feld hinzufügen

[](#altcha-feld-hinzufügen)

**Backend → Formulare → \[Dein Formular\] → Neues Formularfeld**

1. Feldtyp: **ALTCHA Anti-SPAM Widget**
2. Feldname: `captcha` (empfohlen)
3. Fertig! (Konfiguration erfolgt in `config.yml`)

### E-Mail-Benachrichtigung

[](#e-mail-benachrichtigung)

In deiner E-Mail-Benachrichtigung (Notification Center oder Contao Standard) steht das Token `##form_spam_marker##` zur Verfügung.

**Beispielhafte Verwendung im Betreff:**

```
##form_spam_marker##Neue Anfrage über Kontaktformular

```

**Ergebnis:**

- Normal: `Neue Anfrage über Kontaktformular`
- SPAM: `*** SPAM *** Neue Anfrage über Kontaktformular`

So kannst du SPAM-Nachrichten im Posteingang sofort erkennen und z.B. automatisch in einen Spam-Ordner verschieben lassen.

---

Logs &amp; Debugging
--------------------

[](#logs--debugging)

### System-Log

[](#system-log)

**Backend → System → System-Log**

Hier findest du alle Anti-SPAM Ereignisse:

- **Rot:** SPAM erkannt, Formular blockiert
- **Normal:** Prüfung erfolgreich, kein SPAM / Informationen

**Debug-Modus aktivieren** für detaillierte Logs (eher für Troubleshooting/Analyse):

- Zeit-Berechnungen
- Feldmappings
- Content-Analyse Scores
- API-Requests

---

Troubleshooting
---------------

[](#troubleshooting)

### ALTCHA wird nicht angezeigt

[](#altcha-wird-nicht-angezeigt)

**Prüfe:**

1. HMAC-Key in `.env.local` gesetzt?
2. ALTCHA-Formularfeld hinzugefügt?
3. Cache geleert? (`rm -rf var/cache/*`)
4. Browser-Console: JavaScript-Fehler?

### Content-Analyse funktioniert nicht

[](#content-analyse-funktioniert-nicht)

**Prüfe:**

1. Content-Analyse aktiviert?
2. Mindestens ein Test aktiviert?
3. Felder ausgewählt?
4. Debug-Modus: Logs prüfen

### Legitime Anfragen werden als SPAM erkannt

[](#legitime-anfragen-werden-als-spam-erkannt)

**Lösungen:**

1. **Schwellwert erhöhen** (z.B. von 50 auf 70)
2. **Tests deaktivieren** die zu streng sind
3. **Felder anpassen** (z.B. "Website"-Feld vom URL-Check ausschließen)
4. **Debug-Modus** aktivieren und Scores analysieren

### SPAM kommt trotzdem durch

[](#spam-kommt-trotzdem-durch)

**Lösungen:**

1. **Schwellwert senken** (z.B. von 50 auf 30)
2. **Mehr Tests aktivieren**
3. **IP-Blacklist aktivieren**
4. **ALTCHA aktivieren**
5. **Honeypot-Felder hinzufügen**

---

Technische Details
------------------

[](#technische-details)

### Systemanforderungen

[](#systemanforderungen)

- PHP 8.2 oder höher
- Contao 4.13 oder höher / Contao 5.3 LTS
- Symfony 5.4 / 6.0 / 7.0
- ALTCHA Library 1.2+

### Hook-Prioritäten

[](#hook-prioritäten)

```
compileFormFields (Priority 100):
  -> Timestamp in Session speichern

prepareFormData (Priority 100):
  -> Multi-Layer SPAM-Checks
  -> Bei SPAM: Flag setzen

```

### Architektur

[](#architektur)

```
Services:
  - AltchaService (Challenge-Erstellung + Validierung)
  - IpBlacklistService (StopForumSpam.com API)
  - ContentAnalysisService (Pattern-Matching)
  - LoggingHelper (Unified Logging)

Listener:
  - FormLoadListener (Timestamp)
  - AntiSpamFormListener (SPAM-Checks)
  - PageListener (CSS/JS)

Widgets:
  - AltchaFormField (Captcha)
  - HoneypotField (Text)
  - HoneypotTextareaField (Textarea)
  - HoneypotCheckboxField (Checkbox)

```

---

Lizenz
------

[](#lizenz)

MIT License - siehe [LICENSE](LICENSE) Datei

---

Credits
-------

[](#credits)

- **ALTCHA Library:**
- **StopForumSpam:**
- **Contao CMS:**

---

Support
-------

[](#support)

**Projekt:**
**Website:**

---

**Hinweis:** Dieses Bundle wird ohne Gewährleistung bereitgestellt. Teste es gründlich vor dem produktiven Einsatz und passe die Einstellungen an deine Bedürfnisse an.

Entwickelt mit ❤️ in Norddeutschland von **connect2Net webServices** / Stefan Meise

###  Health Score

36

—

LowBetter than 82% of packages

Maintenance54

Moderate activity, may be stable

Popularity21

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity50

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~7 days

Total

4

Last Release

144d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/ac0762d9bbef65a1c45415f29d26173d842821dcc779f4496d899b16fcdb98c3?d=identicon)[con2net](/maintainers/con2net)

---

Top Contributors

[![con2net](https://avatars.githubusercontent.com/u/13145836?v=4)](https://github.com/con2net "con2net (11 commits)")

---

Tags

spamcaptchacontaoFormsHoneypotblacklistprotectionALTCHA

### Embed Badge

![Health badge](/badges/con2net-contao-anti-spam-form-bundle/health.svg)

```
[![Health](https://phpackages.com/badges/con2net-contao-anti-spam-form-bundle/health.svg)](https://phpackages.com/packages/con2net-contao-anti-spam-form-bundle)
```

###  Alternatives

[gregwar/captcha

Captcha generator

1.8k9.6M138](/packages/gregwar-captcha)[msurguy/honeypot

Honeypot spam prevention

4381.2M12](/packages/msurguy-honeypot)[gregwar/captcha-bundle

Captcha bundle

3524.7M32](/packages/gregwar-captcha-bundle)[karser/karser-recaptcha3-bundle

Google ReCAPTCHA v3 for Symfony

1862.4M7](/packages/karser-karser-recaptcha3-bundle)[usarise/turnstile

PHP library for Turnstile, is Cloudflare’s smart CAPTCHA alternative. It can be embedded into any website without sending traffic through Cloudflare and works without showing visitors a CAPTCHA.

2393.5k6](/packages/usarise-turnstile)[exadium/silverstripe-invisible-spam-protection

Very simple anti spam protection based on principle that automated spammers enter bogus information in all form fields. Field is added to form that is hidden using CSS hiding it from human users. Form is only allowed to be submitted if field is empty. Includes an EditableInvisibleSpamField to integrate with the UserForms module.

112.1k](/packages/exadium-silverstripe-invisible-spam-protection)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
