Allererste Maßnahme:
- Sorge dafür, dass die Seiten mit den Formularen NICHT bei Google & Co. auftauchen.
- Trage diese aber nicht oder jedenfalls nicht direkt in die robots.txt ein. (Die können die Spammer auch lesen...)
Sodann:
- preg_match kann sehr hilfreich sein und solche Einträge erkennen. Allerdings wirst Du feststellen, dass die Regeln durch solche Eingaben immer komplizierter werden und zu
false positives
führen.
Man kann auch sowas machen: (Den Code habe ich live geschrieben um eine Möglichkeit zu zeigen. Er ist überwiegend wahrscheinlich fehlerhaft.)
<?php
# Beim Formular senden:
$arZahlen = [ 'Null', 'Eins', … , 'Neun' ];
$arOps = [ 'plus', 'minus', 'mal' ];
$z1 = rand( 0, 9 );
$z2 = rand( 0, 9 );
$op = rand( 0, 2 );
session_start();
switch ( $op ) {
case 0:
$_SESSION['hint'] = $z1 + $z2;
break;
case 1:
$_SESSION['hint'] = $z1 - $z2;
break;
case 2:
$_SESSION['hint'] = $z1 * $z2;
break;
}
$hintText = $arZahlen[$z1]
. ' '
. $arOps[$op]
. ' '
. $arZahlen[$z2]
. '?';
?>
<form method="POST" …>
…
<label><?=$hintText;?>
<input type="text" name="hint" value=""></input>
</label>
…
</form>
Beim Empfangen:
<?php
session_start();
if ( intval( $_POST['hint'] ) !== $_SESSION['hint'] ) {
trigger_error(
'Mach hier was Du willst...',
E_USER_NOTIZE
);
}