Avatar billede Asky Forsker
19. december 2023 - 13:31 Der er 11 kommentarer og
1 løsning

Nogle af mine formularer i PHP er plaget af spam

Nogle af mine formularer i PHP er plaget af span-bestillinger. i dag 15 stk.
Felterne er beskyttet mod glemt felt mm. i JavaScript.
Men jeg har nok brug for flere tiltag fx postnummer kun 4 tal, korrekt mailadresse, korrekt telefonnummer kun med tal osv.
Nogle af disse ting har jeg lavet i PHP, men de virker først efter submit.
alle forslag modtages med stor tak.
Avatar billede arne_v Ekspert
19. december 2023 - 16:17 #1
Umiddelbart vil jeg sige at:
* integriteten inkl. forebyggelse af spam skal håndteres server side (PHP)
* hjælp til brugerne kan med fordel gøres client side (JavaScript)
men man skal skelne mellem:
- fumle brugere som laver fejl, hvor det giver god mening at informere dem så hurtigt som muligt
- ondsindede spammere, hvor det gover god mening at lade dem spilde så meget tid som muligt uden at få noget ud af det

Så jeg ville lade java script:
- detecte typisk ægte fejl og hjælpe med dem
- lade spammerne kører derudaf for at lade server side droppe det til sidst
Avatar billede Asky Forsker
19. december 2023 - 17:42 #2
Det ser meget ud til, at det er nogle skolebørn, der har moret sig med at udfylde en enkelt formular ved at køre over tastaturet. Derfor vil jeg gøre det besværligt for dem at få formularen sendt fx ved at postnummer skal være 4 tal, telefonnummeret 6 eller 8 tal osv. Så kan de ikke bar skrive qwerty, hvor der skal stå tal. Det er lidt voldsomt med  mere end 15 indtastninger bare i dag.
Avatar billede Asky Forsker
20. december 2023 - 14:02 #3
Da der idag også kom 33 fup-tilmeldinger har jeg aflyst den automatiske afsendelse af mails fra programmet. Den etableres igen en gang efter nytår.
Avatar billede sukos Juniormester
20. december 2023 - 14:38 #4
Hmm, du kan lave et hiddenfelt som får nyt navn ved hvert load
Og så bruge sessions til at registrere om det navn allerede er sat.
Tillader en spamrobot et submit, og ikke flere.
En med mus og tastatur kan selvf. flere gange, men så skal han også sidde der.
Avatar billede sukos Juniormester
20. december 2023 - 14:39 #5
Personligt gider jeg ikke de der "chapta" løsninger.
Avatar billede Asky Forsker
20. december 2023 - 17:04 #6
Eksempel på spam-udfyldning af felterne:

Hej mOneDHkdRcA,
Tak for din Tilmelding til medlemskonference
Stilling: bpjJYRulwd
Mail: thechef82@gmail.com
Adresse: fCJTrjiDq
Postnummer: mubIztWNoOV By: xPhqJnRzuBrSk
Tlf.: 5268932847
Arbejdssted: RDbxJluEaqpyWo Arbejdskommune: QTvrgjdZ
Medlem/ikke : Kun fredag
Deltagelse: Kun torsdag CVR: GVfdRWDIityr EAN: NclLCBQFrY
Bemærkninger: qtGrvhdHQfCZNaxJ
Venlig hilsen
Firma

Nu har jeg jo ikke forstand på spam, men det ligner ikke en spam-robot.
Så hvis jeg laver en programmering, der får programmet til at dø, hvis fx postnummer ikke har 4 cifre - vel at mærke tal og ikke bogstaver. eller noget med telefonnummeret.
Helst noget simpelt, der ikke kræver, at chefen skal betale mange dyre arbejdstimer.
Avatar billede sukos Juniormester
20. december 2023 - 17:32 #7
Du skal ha et unikt feltnavn til hver load af siden der laves.
Feltets navn registreres med sessions.
Når data sendes afsted, tjek om den session er sat, og uanset hvad, slet den session med det samme, inden script håndterer formfelter.
Avatar billede sukos Juniormester
20. december 2023 - 17:36 #8
Som skrevet, sidder der er en klaphat foran compen hele natten, ja så er det det.
En robot er kun på en gang, og så er det det.
Log evt. ipadresse og url som pastes, til mulig videreformidling af info.
Avatar billede Asky Forsker
27. december 2023 - 17:58 #9
Har nu afprøvet disse to Koder, men når jeg skriver en masse bogstaver i stedet for fx 4 tal for postnummer, så kommer vrøvlet med i mailen.

function check_postnummer($postnummer) {
    // fjerner mellemrum
    $postnummer = preg_replace('/\s+/', '', $postnummer);

    return (preg_match ("/^\d{4}$/", $postnummer))? true : false;
    if (false($postnummer)) {  die ("Forkert indtastning."); }
}

function check_telefon($telefon) {
$telefon = preg_replace('/\s+/', '', $telefon);

  return (preg_match ("/^\d{8,10}$/", $telefon))? true : false;
  if (false($postnummer)) {  die ("Forkert indtastning."); }

}
funktionerne virker åbenbart ikke efter hensigten, men der kommer ingen fejlmeddelelser.
Avatar billede Asky Forsker
05. januar 2024 - 16:20 #10
Ved hjælp af JavaScript har jeg fået lidt styr postnummer og telefonnummer, men det ser ud til at misbruget fortsætter på et lidt lavere plan.
#8 "Log evt. ipadresse og url som pastes, til mulig videreformidling af info."
Det kan jeg ikke,da  mailen ikke sendes til mig, men til "Chefen".
Ideen med sessions kan jeg måske finde ud af, men har brug for et eksempel.
Avatar billede Asky Forsker
09. januar 2024 - 19:37 #11
Det virker ikke at flytte til en anden mappe, derfor har jeg kontaktet mit webhotel. De anbefaler mig at installere en såkaldt captcha. Det er jeg så i gang med i PHP. Egentlig er jeg måske tæt på en løsning og så alligevel ikke.
Captcha billedet er meget lille, så man kan ikke se hvad det forestiller, opdateringen fungerer tilsyneladende og skrivefeltet er der også,men når billedet er alt for lille ca 16x16 kommer jeg ikke videre. Hvis nogen har erfaringer med captcha, hører jeg gerne fra dem.
Avatar billede Asky Forsker
10. januar 2024 - 11:04 #12
På dette site fandt jeg en captcha, der virkede:
https://www.w3schools.in/php/examples/captcha
Den er primitiv, men den virker fint med tal med hvid skrift på sortbaggrund.
Efter at have afprøvet flere sofistikerede modeller, viser det sig, at de enkle ting også kan fungere.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester