Ich habe die Zeitfalle um einen Ländercheck erweitert. Das funktioniert bei mir aktuell wunderbar.
Es gibt immer wieder Bots, die durchkommen und händisch gelöscht werden müssen. Ich habe bei mir 6 Sekunden eingestellt und habe so ca. zwei Bots alle drei Tage die es schaffen sich trotz Zeitfalle zu registrieren. In den Logs habe ich gesehen, dass diese Bots dann länger zum Ausfüllen benötigt haben und die Zeitkomponente hier "menschenähnlich" ist.
Allen die die Zeitfalle umgehen gemein ist aber, dass im Formular das letzte Land in der Länderliste ausgewählt wurde (wenn man das nicht deaktiviert hat ist das Zimbabwe).
Aus dem Grund habe ich den Code so erweitert, dass im Falle in der die Zeitfalle nicht greift auch das Land geprüft wird.
Achtung: Kunden aus dem Land können dann nicht mehr ein neues Kundenkonto anlegen. Man sollte nur ein Land wählen, aus dem man keine Bestellungen will. Ggf. Kann man ein Phantasieland anlegen und die ID im Script übernehmen. Dazu muss in Zeile 12 hinter CHK_UNW_COUNTRY die Länder-ID eingegeben werden.
Einfach die Datei /includes/extra/application_top/application_top_end/p3e_register_time_check.php
mit folgendem Inhalt erstellen:
CHK_TIME_MIN entspricht im Code die Zeit in Sekunden, die der Kunde zum Ausfüllen mindestens benötigen soll -- (default=6) - falls Bots durchkommen schrittweise erhöhen
CHK_UNW_COUNTRY soll dem vom Bot genutzten Land in der Länderliste entsprechen -- (default=239) - im Admin unter Land/Steuer -> Land -> das Land anklicken, dass die Bots nutzen (bei mir immer das unterste = Zimbabwe) und im Browser die cID auslesen (z.B.: bei /admin/countries.php?page=12&cID=239&action=edit ist es die 239) und unter CHK_UNW_COUNTRY eintragen. Default ist hier 239 (bei mir für Zimbabwe). ACHTUNG! Mit dem Land Zimbabwe kann dann kein Konto mehr angelegt werden. Ggf. ein neues Land alphabetisch nach Zimbabwe erfinden und anlegen! Nutzung auf eigene Gefahr.
<?php// p3e Zeitstempel + Landexclusion Create Account 2023-10-23// diese Datei sollte im Verzeichnis shop\includes\extra\application_top\application_top_end stehen// CHK_TIME_MIN entspricht der Zeit in Sekunden, die der Kunde zum Ausfüllen mindestens benötigen soll -- (default=6) - falls Bots durchkommen schrittweise erhöhen// CHK_UNW_COUNTRY soll dem vom Bot genutzten Land in der Länderliste entsprechen -- (default=239) - im Admin unter Land/Steuer -> Land -> das Land anklicken, dass // die meisten Bots nutzen // (bei mir immer das unterste = Zimbabwe) und im Browser die cID auslesen (z.B.: bei /admin/countries.php?page=12&cID=239&action=edit ist es die 239) und unter // CHK_UNW_COUNTRY eintragen. Default ist hier 239 (bei mir für Zimbabwe). ACHTUNG! Mit dem Land Zimbabwe kann dann kein Konto mehr angelegt werden. Ggf. ein// neues Land alphabetisch nach Zimbabwe erfinden und anlegen! Nutzung auf eigene Gefahr.defined('CHK_TIME_MIN') || define('CHK_TIME_MIN', 6);defined('CHK_UNW_COUNTRY') || define('CHK_UNW_COUNTRY', 239);if (basename($_SERVER["SCRIPT_NAME"], '.php') == 'create_account' || basename($_SERVER["SCRIPT_NAME"], '.php') == 'create_guest_account') { echo ((int
)$_POST['country']); //p3e countrycheck if(!isset($_POST['action']) || (isset($_POST['action']) && $_POST['action'] != 'process')) { $_SESSION['timechk'] = time(); // Zeitstempel } if(isset($_POST['action']) && ($_POST['action'] == 'process')) { if (isset($_SESSION['timechk'])) { if (time() - $_SESSION['timechk'] < CHK_TIME_MIN
) { // stinkt nach Bot - ab auf die Startseite unset ($_SESSION['timechk']); xtc_redirect
(xtc_href_link
(FILENAME_DEFAULT
)); } elseif (isset($_POST['country']) && (int
)$_POST['country'] == CHK_UNW_COUNTRY
) { xtc_redirect
(xtc_href_link
(FILENAME_DEFAULT
)); } } else { xtc_redirect
(xtc_href_link
(FILENAME_DEFAULT
)); } }} [
EDIT Tomcraft 31.10.2023: Code in
Beitrag 1 ergänzt.]