Hallo Gerhard,
den Submit-Button auszugrauen hilft gar nichts, ein Spambot achtet da nicht drauf. Ganz stupide Bots sind auf bestimmte Formulartypen geeicht und posten blindlings was dahin, ohne das Form überhaupt abzurufen. Etwas bessere Bots rufen das Form ab, nutzen das empfangene HTML aber nur um daraus die gePOSTete Antwort zusammenzusetzen. Buttons interessieren sie nur soweit, dass sie den Namen auslesen und als Submitter posten.
Dumme Spam-Bots kannst Du über ein hidden Input ausschließen, in dem Du einen Zufallswert (z.B. eine GUID oder eine Zufallszahl) speicherst. Diesen Wert speicherst Du serverseitig in der Session des Anwenders, und du weist einen POST-Request ab, wenn der Zufallswert mit dem Wert in der Session nicht übereinstimmt.
Ein klügerer Spambot sieht das hidden field und schickt Dir den Wert ebenfalls zurück.
Ein menschlicher User würde aber Zeit brauchen, um das Form zu lesen, auszufüllen und zu senden. Ein Spambot, der es liest und ausfüllt, macht das in einer Sekunde. Du kannst am Server den Zeitpunkt speichern, zu dem das Form abgerufen wurde, und wenn die Antwort gePOSTet wird, dann prüfst Du ob eine Mindestantwortzeit unterschritten wurde. Das muss man dem User natürlich verklickern. Spambots interessieren sich typischerweise nicht für die Serverantwort, insofern kannst Du es so machen, dass Du das Form mit den eingetragenen Inhalten wieder anzeigst und einen Text ausgibst wie "Beim Speichern ist ein temporäres Problem aufgetreten, bitte senden Sie das Formular noch einmal". Das ist jetzt eine Art Turing-Test für Spambots: ein Bot soll nicht merken, dass sein Post ignoriert wurde (andernfalls könnte sein Bot-Papa ihn schlauer machen), aber ein Mensch muss durchgelassen werden.
Du solltest beide Maßnahmen ergreifen: Hidden Field für Blindspam, und Abrufzeitvergleich für klügeren Spam. Gegen Bots, die einfach 20s warten bevor sie antworten, hilft das natürlich auch nicht.
Was beliebt war, sind Captcha Bilder, die von der Hypothese ausgehen, dass ein Mensch sie versteht und ein Computer nicht. Die AI Entwicklung hat damit aufgeräumt, die diversen Zahlenratebilder sind mittlerweile so, dass ICH sie nicht mehr kapiere. Spambots mit Captcha-AI aber schon. Vielleicht muss man mittlerweile eine Textaufgabe stellen, die der Absender lösen muss - das ist aber meiner Meinung nach schon knapp hinter der Grenze zum "du kannst mich mal mit deiner Seite".
Googles Recaptcha wäre eine Alternative, aber nicht jeder mag Google, es ist DSGVO-mäßig nicht ganz einfach zu handhaben und es braucht JavaScript zum Funktionieren. Sorry. Die Spammer sind eine Pest und wir werden sie nicht immer los.
Rolf
sumpsi - posui - clusi