PHPackages                             solidwork/contao-simple-spam-trap-bundle-c5 - 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. solidwork/contao-simple-spam-trap-bundle-c5

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

solidwork/contao-simple-spam-trap-bundle-c5
===========================================

Simple spam protection for Contao 5 forms via honeypot and timestamp form fields

04PHP

Since Mar 3Pushed 2mo agoCompare

[ Source](https://github.com/ArturJo/contao-simple-spam-trap-bundle-c5)[ Packagist](https://packagist.org/packages/solidwork/contao-simple-spam-trap-bundle-c5)[ RSS](/packages/solidwork-contao-simple-spam-trap-bundle-c5/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependenciesVersions (1)Used By (0)

Contao Simple Spam Trap Bundle (C5)
===================================

[](#contao-simple-spam-trap-bundle-c5)

Einfacher Spam-Schutz für Contao-Formulare über zwei zusätzliche Formularfeld-Typen: **Honeypot** und **Zeitstempel**. Das Bundle ist speziell für Contao 5.3+ entwickelt und folgt den aktuellen Contao-5-Konventionen.

Voraussetzungen
---------------

[](#voraussetzungen)

AbhängigkeitVersionPHP^8.1Contao^5.3Installation
------------

[](#installation)

```
composer require solidwork/contao-simple-spam-trap-bundle-c5
```

Anschließend die Datenbank aktualisieren (z. B. über den Contao-Manager oder die Konsole):

```
php bin/console contao:migrate
php bin/console assets:install
```

> Nach `assets:install` sind die CSS-Assets unter `bundles/contaosimplespamtrapc5/css/spam-trap.css` verfügbar.

> **Wichtig bei Page-Caching:** Das Timestamp-Feld schreibt den aktuellen Zeitstempel beim Seitenaufruf ins HTML. Wenn Contao Full-Page-Caching aktiv ist, wird ein veralteter Timestamp ausgeliefert — legitime Formulareinsendungen werden dann fälschlicherweise als Spam blockiert. Formularseiten sollten daher vom Cache ausgeschlossen sein (in Contao über das Seitenlayout konfigurierbar).

Funktionsweise
--------------

[](#funktionsweise)

Das Bundle registriert zwei neue Formularfeld-Typen im Contao-Formulargenerator. Beide Felder sind für den Besucher unsichtbar und erzeugen keinen zusätzlichen Aufwand für menschliche Nutzer.

### Honeypot-Spam-Schutz

[](#honeypot-spam-schutz)

Ein verstecktes Textfeld, das für Menschen unsichtbar ist, von automatisierten Bots aber typischerweise befüllt wird. Bei Formularübermittlung wird geprüft, ob das Feld leer geblieben ist — ist das nicht der Fall, wird die Übermittlung als Spam gewertet.

**Technische Details:**

- Rendert ein `` mit `tabindex="-1"` und `aria-hidden="true"`
- Per CSS aus dem sichtbaren Bereich verschoben (`position: absolute; left: -9999px`)
- Kein JavaScript notwendig
- Fehlermeldung bei Befüllung: übersetzbar über `TL_LANG['ERR']['honeypot']`

### Zeitbasierter Spam-Schutz (Timestamp)

[](#zeitbasierter-spam-schutz-timestamp)

Beim Laden des Formulars wird ein verstecktes Feld mit dem aktuellen Unix-Timestamp befüllt. Bei der Übermittlung wird geprüft, ob seit dem Laden mindestens eine konfigurierbare Mindestzeit vergangen ist. Bots, die Formulare sofort absenden, werden so erkannt.

**Technische Details:**

- Rendert ein `` mit dem aktuellen `time()`-Wert
- Standardmäßige Mindestzeit: **8 Sekunden**
- Konfigurierbar über das Backend-Feld „Mindestzeit in Sekunden"
- Fehlermeldung bei Unterschreitung: übersetzbar über `TL_LANG['ERR']['timestamp']`

Einrichtung im Backend
----------------------

[](#einrichtung-im-backend)

1. Im Contao-Backend ein Formular öffnen oder neu anlegen.
2. Im Bereich **Formularfelder** ein neues Feld hinzufügen.
3. Als Typ **„Honeypot-Spam-Schutz"** oder **„Zeitbasierter Spam-Schutz"** wählen.
4. Einen internen Namen vergeben (z. B. `hp` oder `ts`).
5. Beim Zeitstempel-Feld optional die **Mindestzeit in Sekunden** anpassen (Standard: 8).
6. Speichern — fertig.

> **Empfehlung:** Beide Felder kombiniert einsetzen, um die Erkennungsrate zu erhöhen.

Best Practices
--------------

[](#best-practices)

### Feldplatzierung

[](#feldplatzierung)

- Das Honeypot-Feld sollte nicht das erste oder letzte Feld im Formular sein, damit es natürlicher wirkt.
- Das Timestamp-Feld kann an beliebiger Stelle stehen, da es ohnehin unsichtbar ist.

### Mindestzeit (Timestamp)

[](#mindestzeit-timestamp)

- Standardwert von **8 Sekunden** ist ein guter Ausgangspunkt für einfache Formulare.
- Kurze Formulare (nur E-Mail-Feld): 5–8 Sekunden sind ausreichend.
- Lange Formulare (viele Felder): 10–15 Sekunden können sinnvoll sein.
- Zu hohe Werte frustrieren echte Nutzer, die z. B. Autofill verwenden.

### Kombination beider Felder

[](#kombination-beider-felder)

```
[Vorname]
[Nachname]
[E-Mail]
[Honeypot]     ← unsichtbar für Menschen
[Timestamp]    ← unsichtbar für Menschen
[Nachricht]
[Absenden]

```

Beide Felder ergänzen sich: Der Honeypot erkennt Bots, die alle Felder befüllen; der Timestamp erkennt Bots, die Formulare sofort absenden.

### Kein JavaScript erforderlich

[](#kein-javascript-erforderlich)

Der Spam-Schutz funktioniert vollständig serverseitig und CSS-basiert — kein JavaScript notwendig. Das macht ihn robust gegenüber Browsern mit deaktiviertem JavaScript.

### Accessibility

[](#accessibility)

- Das Honeypot-Feld trägt `aria-hidden="true"` und `tabindex="-1"`, sodass es von Screenreadern und Tastaturnavigation ignoriert wird.
- Das Timestamp-Feld ist ein `type="hidden"` und damit für alle Nutzer transparent.

CSS-Anpassung
-------------

[](#css-anpassung)

Das Bundle liefert ein minimales CSS-Stylesheet, das über den `generatePage`-Hook automatisch eingebunden wird. Es kann bei Bedarf in eigenen Projekten überschrieben werden:

```
/* Honeypot aus dem sichtbaren Bereich verschieben */
.widget-honeypot,
.hp-field {
    position: absolute;
    left: -9999px;
    width: 1px;
    height: 1px;
    overflow: hidden;
    opacity: 0;
}

/* Timestamp-Wrapper verstecken */
.widget-timestamp {
    display: none;
}
```

Übersetzungen
-------------

[](#übersetzungen)

Das Bundle enthält Übersetzungen für **Deutsch** und **Englisch**. Eigene Fehlermeldungen können über die Standard-Contao-Sprach-Override-Mechanismen angepasst werden:

```
// contao/languages/de/default.php (im eigenen Projekt)
$GLOBALS['TL_LANG']['ERR']['honeypot'] = 'Eigene Fehlermeldung.';
$GLOBALS['TL_LANG']['ERR']['timestamp'] = 'Eigene Fehlermeldung.';
```

Logging
-------

[](#logging)

Das Bundle schreibt alle erkannten Spam-Versuche automatisch in ein dediziertes Log-Verzeichnis:

```
var/
└── log/
    └── spam-trap/
        ├── spam-trap-2026-03-01.log
        ├── spam-trap-2026-03-02.log
        └── spam-trap-2026-03-03.log

```

Die Logs rotieren täglich. Es werden maximal **30 Tage** aufbewahrt, ältere Dateien werden automatisch gelöscht.

Jeder Eintrag enthält:

FeldBeschreibung`field`Interner Feldname im Formular`ip`IP-Adresse des Absenders`uri`Aufgerufene URL`user_agent`Browser / Bot-Kennung`elapsed_sec`Verstrichene Zeit seit Formular-Load *(nur Timestamp)*`min_sec`Konfigurierte Mindestzeit *(nur Timestamp)***Beispiel-Eintrag (Honeypot):**

```
[2026-03-03 14:22:07] spam_trap.WARNING: Honeypot field filled — spam submission blocked
  {"field":"hp","ip":"1.2.3.4","uri":"/kontakt","user_agent":"curl/7.88"} []

```

**Beispiel-Eintrag (Timestamp):**

```
[2026-03-03 14:22:31] spam_trap.WARNING: Form submitted too fast — spam submission blocked
  {"field":"ts","elapsed_sec":1,"min_sec":8,"ip":"1.2.3.4","uri":"/kontakt","user_agent":"curl/7.88"} []

```

> Die Logs werden über einen eigenen Monolog-Channel `spam_trap` geschrieben, der vom Bundle automatisch konfiguriert wird — keine manuelle Anpassung der App-Konfiguration nötig.

Projektstruktur
---------------

[](#projektstruktur)

```
contao-simple-spam-trap-bundle-c5/
├── composer.json
├── config/
│   └── services.yaml                      # Symfony-Service-Autowiring
├── contao/
│   ├── config/config.php                  # Registriert TL_FFL-Typen
│   ├── dca/tl_form_field.php              # DCA-Paletten + minTime-Feld
│   ├── languages/
│   │   ├── de/default.php                 # Deutsche Fehlermeldungen
│   │   ├── de/tl_form_field.php           # Deutsche Backend-Labels
│   │   ├── en/default.php                 # Englische Fehlermeldungen
│   │   └── en/tl_form_field.php           # Englische Backend-Labels
│   └── templates/
│       ├── form_honeypot.html5            # Honeypot-Template
│       └── form_timestamp.html5           # Timestamp-Template
├── public/css/
│   └── spam-trap.css                      # Frontend-CSS
└── src/
    ├── ContaoSimpleSpamTrapBundleC5.php   # Bundle-Klasse
    ├── ContaoManager/Plugin.php           # Contao-Manager-Plugin
    ├── EventListener/
    │   └── AddSpamTrapCssListener.php     # generatePage-Hook für CSS
    └── Widget/
        ├── HoneypotWidget.php
        └── TimestampWidget.php

```

Verwandtes Bundle
-----------------

[](#verwandtes-bundle)

Für **Contao 4.13** gibt es die Vorgängerversion: [solidwork/contao-simple-spam-trap-bundle](https://github.com/ArturJo/contao-simple-spam-trap-bundle)

Lizenz
------

[](#lizenz)

LGPL-3.0-or-later — siehe [LICENSE](https://www.gnu.org/licenses/lgpl-3.0.html)

###  Health Score

19

—

LowBetter than 10% of packages

Maintenance57

Moderate activity, may be stable

Popularity3

Limited adoption so far

Community2

Small or concentrated contributor base

Maturity11

Early-stage or recently created project

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.

### Community

Maintainers

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

### Embed Badge

![Health badge](/badges/solidwork-contao-simple-spam-trap-bundle-c5/health.svg)

```
[![Health](https://phpackages.com/badges/solidwork-contao-simple-spam-trap-bundle-c5/health.svg)](https://phpackages.com/packages/solidwork-contao-simple-spam-trap-bundle-c5)
```

###  Alternatives

[defuse/php-encryption

Secure PHP Encryption Library

3.9k162.4M214](/packages/defuse-php-encryption)[roave/security-advisories

Prevents installation of composer packages with known security vulnerabilities: no API, simply require it

2.9k97.3M6.4k](/packages/roave-security-advisories)[mews/purifier

Laravel 5/6/7/8/9/10 HtmlPurifier Package

2.0k16.7M113](/packages/mews-purifier)[robrichards/xmlseclibs

A PHP library for XML Security

41278.1M118](/packages/robrichards-xmlseclibs)[bjeavons/zxcvbn-php

Realistic password strength estimation PHP library based on Zxcvbn JS

86917.5M63](/packages/bjeavons-zxcvbn-php)[enlightn/security-checker

A PHP dependency vulnerabilities scanner based on the Security Advisories Database.

33732.2M110](/packages/enlightn-security-checker)

PHPackages © 2026

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