Code Monkey home page Code Monkey logo

yform_spam_protection's Introduction

Spamschutz für REDAXO 5 YForm

Das Addon yform_spam_protection kombiniert verschiedene Maßnahmen, um zuverlässig Spam und Bots abzuwehren. Die Einrichtung ist in weniger als 5 Minuten erledigt.

yform spam protectiopn

Features

  • Einfache Integration - nur eine Zeile Code in das YForm-Formular einfügen.
  • Bestmögliche Usability – keine zusätzlichen Eingaben vom Benutzer notwendig.
  • Barrierefrei – ohne Rechenaufgabe oder Bild-Captcha.
  • DSGVO-konform – sofern keine Konfiguration mit externen Anbietern gewählt wird.
  • Mehrsprachig - Die Fehlermeldung kann je Sprache durch Addons wie Sprog oder XOutputFilter angepasst werden.
  • reCaptcha Plugin - ermöglicht die Einbindung von google recaptcha

Weitere geplante Features unter https://github.com/FriendsOfREDAXO/yform_spam_protection/issues

Installation

  • Im REDAXO-Backend unter Installer abrufen und
  • anschließend unter Hauptmenü > AddOns installieren.
  • Den gewünschten YForm-Formularen das Feld spam_protection hinzufügen:

PHP-Schreibweise

$yform->setValueField('spam_protection', array("honeypot","Bitte nicht ausfüllen.","Ihre Anfrage wurde als Spam erkannt und gelöscht. Bitte versuchen Sie es in einigen Minuten erneut oder wenden Sie sich persönlich an uns.", 0));

Pipe-Schreibweise

spam_protection|honeypot|Bitte nicht ausfüllen|Ihre Anfrage wurde als Spam erkannt und gelöscht. Bitte versuchen Sie es in einigen Minuten erneut oder wenden Sie sich persönlich an uns.|0

Hinweis: Bei der Installation wird folgende Datenbanktabelle erstellt: rex_tmp_yform_spam_protection_frequency. Diese beinhaltet die IP-Adresse des Besuchers und löscht diese nach Ablauf eines in den Einstellungen festgelegten Zeitraums.

Funktionsweise

Timer

Spambots füllen das Formular in der Regel schneller als ein Mensch aus. Beim 1. Aufruf des Formulars sowie bei jeder weiteren Validierung wird ein Zeitstempel gespeichert.

Wenn der vorgegebene Zeitwert unterschritten wird (z. B. 5 Sekunden), dann deutet dies auf einen Spambot hin. Die Validierung schlägt dann fehl.

Tipp: Zum Testen/Debuggen können die Timer auf einen wesentlich höheren Wert gestellt werden, bspw. 30 Sekunden.

IP-Sperre

Wird das Formular innerhalb weniger Minuten mehrfach von derselben IP abgesendet, deutet dies auf einen Spambot hin, der möglichst viele Abfragen absenden möchte. Übliches Verhalten ist, im Minutentakt Anfragen abzusenden.

Wenn vorgegebene Limits überschritten werden (z. B. 5 Anfragen in 300 Sekunden), deutet dies auf einen Spambot hin. Die Validierung schlägt dann fehl.

Die IPs werden temporär gespeichert und nach Ablauf des vorgegebenen Limits (z. B. 300 Sekunden) gelöscht.

Honeypot

Dem Formular wird ein per CSS für Menschen - jedoch nicht für Bots - ausgeblendetes Eingabefeld angeboten. Spambots sind dazu geneigt, jedes Feld auszufüllen.

Wenn das Feld ausgefüllt wurde, deutet dies auf einen Spambot hin. Die Validierung schlägt dann fehl.

Tipp: Die Umsetzung ist barrierefrei, da Autofill für dieses Feld deaktiviert wurde und dadurch sichergestellt ist, dass Screenreader oder unerfahrene Internetnutzer dieses Feld nicht versehentlich ausfüllen.

Einstellungen

  • Im REDAXO-Backend unter YForm > Spamschutz optional Einstellungen vornehmen.

Achtung

Einige Einstellungen haben aktuell noch keine Funktion. Beteilige dich an der Umsetzung unter https://github.com/FriendsOfREDAXO/yform_spam_protection/issues

Tipps und Tricks

Der 4. Parameter am Feld aktiviert den Debug-Modus

spam_protection|honeypot|Bitte nicht ausfüllen|Fehlermeldung|1

Bei mehreren Formularen auf einer Seite musst Du jedem Formular einen eindeutigen Namen mitgeben:

PHP-Schreibweise

$yform->setObjectparams('form_name','zweites_formular');

Pipe-Schreibweise

objparams|form_name|zweites_formular

Sollte trotz aller beachteten Timings und obigem Tipp zu mehreren Formularen beim Versenden der Fehler „session-microtime nicht eingehalten...“ (bei eingeschalteten Debug-Modus) dauerhaft kommen, so ist zu prüfen, ob das Formular evtl. nicht zweimal abgesendet wird.

Mögliche Ursache dafür ist, dass im Template beispielsweise REX_ARTICLE[] oder $this->getArticle() mehr als einmal verwendet werden.

Lizenz

MIT Lizenz

Autor

yform_spam_protection's People

Contributors

aeberhard avatar alxndr-w avatar claudihey avatar danielweitenauer avatar dergel avatar dtpop avatar marcohanke avatar mc-pmoe avatar mg-gundb avatar ngwngw avatar omphteliba avatar ritzfritz avatar schuer avatar skerbis avatar thorol avatar tobiaskrais avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

yform_spam_protection's Issues

Kein Spamschutz im classic Mode

Der Spamschutz greift nicht im "classic" Modus, da kein Template dafür vorhanden ist.
Abhilfe schafft "Template von /ytemplates/bootstrap nach /ytemplates/classic kopieren".

Akismet

Wir setzen den Dienst "Akismet" von Wordpress, recht erfolgreich gegen Formular-Spam ein.

https://akismet.com/

Vllt wär das eine sinnvolle Option für die yform_spam_protection.

Data too long for column 'was_blocked'

Wollte eben ein via Backup-AddOn erstellten Dum lokal in eine MariaDB importieren und erhalten diesen Fehler.

Fehler

Data too long for column 'was_blocked' at row 1

Values for row 1
(1234123412,'','2022-01-14 16:38:31','0'),

Affected versions / Verwendete Versionen

yform_spam_protection: 1.2.0

Weitere Signale auswerten

Für unseren guten Eric Jones 😅

Zum Beispiel einen SHA256-Hash über Namen oder E-Mail-Adresse legen und diesen für maximal eine Woche zwischenspeichern. Diese Einstellung muss optional sein und pro Formular aktiviert werden können, um Szenarien abzufangen, in denen in kurzer Zeit auch mehrmals dieselben Namen oder Mailadressen erlaubt sind.

Template wird bei Update gelöscht

Hallo Alex,

ich habe gerade bei einem Projekt das AddOn von 1.2.0 auf 1.2.3 gehievt, was am Ende in einem Whoops-Screen endete sobald ich eine Seite mit einem yForm-Formular aufrufe.

Problem ist gewesen, dass ich unter /yform_spam_protection/ytemplates/ in Version 1.2.0 ein eigenes Template gespeichert hatte, was dann nach dem Update verschwunden war und somit den Whoops-Screen triggerte ("Path cannot be empty").
Lösung war: Einfach mein yTemplate von der Festplatte via FTP wieder in den Ordner gelegt => Whoops weg, yForm-Seite läuft.

Es wäre cool, wenn zukünftig eigene Ergänzungen im yTemplates-Ordner bei einem Update erhalten bleiben. :)

Danke und Gruß,
Stefan

Affected versions / Verwendete Versionen

REDAXO: 5.15.1
PHP: 8.1.25
Database: MySQL 5.7.42
Browser: Chrome (aktuell)
AddOns: yForm 4.1.1 / yForm Spam Protection 1.2.3

bug settings disabled

Warning: Use of undefined constant disabled - assumed 'disabled' (this will throw an Error in a future version of PHP) in redaxo/src/addons/yform_spam_protection/pages/yform.spam_protection.settings.php on line 14
Warning: Use of undefined constant disabled - assumed 'disabled' (this will throw an Error in a future version of PHP) in redaxo/src/addons/yform_spam_protection/pages/yform.spam_protection.settings.php on line 24
Warning: Use of undefined constant disabled - assumed 'disabled' (this will throw an Error in a future version of PHP) in redaxo/src/addons/yform_spam_protection/pages/yform.spam_protection.settings.php on line 32
Warning: Use of undefined constant disabled - assumed 'disabled' (this will throw an Error in a future version of PHP) in redaxo/src/addons/yform_spam_protection/pages/yform.spam_protection.settings.php on line 41
Warning: Use of undefined constant disabled - assumed 'disabled' (this will throw an Error in a future version of PHP) in redaxo/src/addons/yform_spam_protection/pages/yform.spam_protection.settings.php on line 48
Warning: Use of undefined constant disabled - assumed 'disabled' (this will throw an Error in a future version of PHP) in redaxo/src/addons/yform_spam_protection/pages/yform.spam_protection.settings.php on line 72
Warning: Use of undefined constant disabled - assumed 'disabled' (this will throw an Error in a future version of PHP) in redaxo/src/addons/yform_spam_protection/pages/yform.spam_protection.settings.php on line 80
Warning: Use of undefined constant disabled - assumed 'disabled' (this will throw an Error in a future version of PHP) in redaxo/src/addons/yform_spam_protection/pages/yform.spam_protection.settings.php on line 85

PHP 8.1 Probleme

Deprecated: trim(): Passing null to parameter #1 ($string) of type string is deprecated in redaxo/src/addons/yform_spam_protection/lib/yform/value/spam_protection.php on line 75

Deprecated: explode(): Passing null to parameter #2 ($string) of type string is deprecated in redaxo/src/addons/yform_spam_protection/lib/yform/value/spam_protection.php on line 21

Validierung außerhalb von YForm ermöglichen / Refactoring

Auf Basis einer eigenen Klasse, die via Methoden einzelne Prüfungen vornimmt, könnten diese Prüfungen auch losgelöst von YForm erfolgen und so in eigene Lösungen implementiert werden.

  • Eigene Klasse
  • Validierung abstrahieren
  • opt. Scoring einbauen
  • Value anpassen
  • Docs anpassen

GeoIP-Dienstanbieter implementieren

Externe Dienstleister mit API, z.B: https://www.maxmind.com/en/home, bieten genauere Daten an, um bestimmte IPs / Regionen zu sperren.

  • API-Key hinterlegbar machen
  • Ergebnisse zwischenspeichern (performanter, günstiger)
  • Basis-Einstellungen (Blacklist, Whitelist)
  • Aufruf / Validierung einfügen
  • Anleitung / Dokumentation

Entwickler bei Spam-Welle informieren

Wenn über einen fixen Zeitraum, bspw. 10 Minuten, fehlgeschlagene Validierungen - also Spam - sich häuft, dann den Entwickler darüber informieren, sodass dieser evtl. vor dem Kunden Bescheid weiß und die Einstellungen zeitweise verschärfen kann.

  • Einstellung bieten
  • Stille YForm-Mail versenden
  • Docs

IP Whitelist

Ich fänd eine IP-Whitelist ganz praktisch, um die Kollegen die Seiten mit Formularen bauen und testen nicht immer wieder entsperren zu müssen. Oder meinst Du das ist dann eher ein Config-Problem?

Fehler nach Installation

Ich habe folgende Fehlerausgabe im Frontend:

Warning: yform template value.spam_protection.tpl.php not found in redaxo/src/addons/yform/lib/yform.php on line 482
Warning: include(): Filename cannot be empty in redaxo/src/addons/yform/lib/yform/value/abstract.php on line 145
Warning: include(): Failed opening '' for inclusion (include_path='.:/usr/iports/php74/share/pear') in redaxo/src/addons/yform/lib/yform/value/abstract.php on line 145

Jemand eine Idee?

IP's hashen?

Ich habe leider nur wenig Ahnung (DSGVO), aber wäre es nicht besser die IP's zu hashen? Und ich habe das Gefühl das die IP-Adressen nicht gelöscht werden, bei mir sind diese nun schon 40 Min in der DB.

TLD-Blockierung einbauen

Auf Basis von Ziel-Mail-Adressen die Top-Level-Domains aussperren

  • Spam-Validator muss Absender-E-Mail-Feld optional entgegen nehmen
  • In den Einstellungen whitelist/blacklist von TLDs einfügen und auswerten
  • Docs aktualisieren

YForm 4 Kompatibilität

11.12.2021, 14:39:05 Fatal error Declaration of rex_yform_value_spam_protection::postValidateAction() must be compatible with rex_yform_base_abstract::postValidateAction(): void redaxo/src/addons/yform_spam_protection/lib/yform/value/spam_protection.php 5
11.12.2021, 14:39:01 Fatal error Declaration of rex_yform_value_spam_protection::getDescription() must be compatible with rex_yform_base_abstract::getDescription(): string redaxo/src/addons/yform_spam_protection/lib/yform/value/spam_protection.php 73


Kein verstecktes Formularfeld oder ähnliches generiert (Redaxo 5.11, YForm 3.4.1)

Hallo,

ich habe das yform_spam_protection of einem Redaxo-System (5.11.0) installiert und den Output eines Formulartemplates um den dazugehörigen Code (PHP-Schreibweise) ergänzt:
$yform->setValueField('spam_protection', array("honeypot","Bitte nicht ausfüllen.","Ihre Anfrage wurde als Spam erkannt und gelöscht. Bitte versuchen Sie es in einigen Minuten erneut oder wenden Sie sich persönlich an uns.", 0));

Es ist YForm 3.4.1 installiert.

Wenn ich das Formular auf der Webseite untersuche, dann sehe ich an der Stelle, an der ich ein Honeypot-Input oder ähnliches erwarten würde, nichts. Ich kenne die Arbeitsweise des AddOns nicht und bin daher verunsichert, ob dies das korrekte Verhalten des AddOns ist, oder ob hier ein Fehler vorliegt.

Falls es ein Fehler ist, woran könnte das liegen?

Bestrafung optional verschärfen - Besucher von der Website aussperren

Statt nur die Validierung zu versagen könnte ab einer gewissen Häufung von fehlgeschlagenen Validierungen oder auf Basis eines Scoring-Algorithmus der Besuch der Seite für 24 Stunden komplett verwehrt werden via IP/Session.

Es muss sichergestellt sein, dass die IP von Firmennetzen bspw. nicht das einzige Kriterium bleibt.

  • Dazu ein Feld removedate in der IP-Tabelle hinzufügen, das im Zweifel immer wieder hochgesetzt wird (on duplicate update)
  • hochgesetzt werden darf es nur, wenn auch wirklich ein Formular abgesendet wird.
  • optional eine Fehlermeldung ausgeben, dass man als Spam erkannt wurde und X Std. warten muss.
  • Die Sperre muss sich einfach entfernen lassen, bspw. über die Datenbank

Fatal error bei Update auf 2.0-beta3

Nachfolgender Fehler kommt beim Update von Version 1.2.1 auf Version 2.0-beta3
TypeError: rex_yform_manager_table_api::importTablesets(): Argument #1 ($tableset_content) must be of type string, null given, called in /www/htdocs/w019d09f/staging.inotec-gmbh.com/redaxo/src/addons/.new.yform_spam_protection/update.php on line 3
File: redaxo/src/addons/yform/plugins/manager/lib/yform/manager/table/api.php
Line: 92

Stacktrace
Function File Line
rex_yform_manager_table_api::importTablesets redaxo/src/addons/.new.yform_spam_protection/update.php 3
require redaxo/src/core/lib/packages/package.php 280
rex_package->includeFile redaxo/src/addons/install/lib/package/package_update.php 63
rex_install_package_update->doAction redaxo/src/addons/install/lib/package/package_download.php 44
rex_install_package_download->run redaxo/src/addons/install/lib/api/api_package_update.php 21
rex_api_install_package_update->execute redaxo/src/core/lib/api_function.php 180
rex_api_function::handleCall redaxo/src/core/backend.php 234
require redaxo/src/core/boot.php 143
require redaxo/index.php 9
System report (REDAXO 5.13.3, PHP 8.1.3, MySQL 5.7.37)
REDAXO
Version 5.13.3
PHP
Version 8.1.3
OPcache no
Xdebug no
Database
Version MySQL 5.7.37
Character set utf8
Server
OS Linux
SAPI fpm-fcgi
Webserver Apache
Request
Browser Firefox/101.0
Protocol HTTP/2.0
HTTPS yes
Packages
backup 2.8.1
be_branding 1.7
be_style 3.0.2
be_style/customizer 3.0.2
be_style/redaxo 3.0.2
cronjob 2.8.2
d2u_address 1.2.2
d2u_helper 1.9.3
d2u_helper/translation_helper 1.9.3
d2u_jobs 1.2.3
d2u_linkbox 1.2.5
d2u_machinery 1.3.6
d2u_machinery/equipment 1.3.6
d2u_machinery/machine_construction_equipment_extension 1.3.6
d2u_machinery/machine_features_extension 1.3.6
d2u_machinery/machine_usage_area_extension 1.3.6
d2u_videos 1.0.9
emailobfuscator 3.0.0
inotec-city 1.0.0
install 2.9.3
maintenance 2.8.1
media_manager 2.12.3
mediapool 2.11.3
metainfo 2.8.5
multinewsletter 3.2.9
osmproxy 1.6.0
phpmailer 2.11.2
project dev
search_it 6.9.0
search_it/autocomplete 6.9.0
search_it/documentation 6.9.0
search_it/plaintext 6.9.0
search_it/stats 6.9.0
sprog 1.3.0
statistics 2.2.0
statistics/media 2.2.0
structure 2.13.3
structure/content 2.13.3
tinymce5 1.2.15
uploader 2.3.0
url 2.0.1
users 2.8.2
yform 4.0.2
yform/email 4.0.2
yform/manager 4.0.2
yform_spam_protection 1.2.1
yrewrite 2.8.3

Installer: Warning value template

Warning: yform template value.spam_protection.tpl.php not found in redaxo/src/addons/yform/lib/yform.php on line 482

Warum auch immer?

id mit autoincrement mit in die Tabelle aufnehmen

Es wäre super, wenn die ID mit autoincrement mit in die Tabelle aufgenommen werden kann. Dann hat man die Möglichkeit das per YFORM auch als Tabelle zu migrieren und im Backend anzuzeigen und Datensätze zu löschen.

Warning: A non-numeric value encountered

In meinem Redaxo Error Log finde ich folgenden Eintrag:
Warning | A non-numeric value encountered | redaxo/src/addons/yform_spam_protection/lib/yform/value/spam_protection.php | 42

Ein Szenario zum Nachstellen des Fehler ist mir nicht bekannt. Zudem trat der Fehler nur einmalig auf.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.