Avatar billede cht22 Professor
19. oktober 2017 - 12:29 Der er 4 kommentarer og
1 løsning

Anti brute force

Er der nogen der har noget kode til at forebygge brute force ved brugerlogin og MySQL database.

Jeg har en ide om at man kunne lave en tabel der logger antal fejlforsøg ved login, hvis man laver mere end 10 fejlforsøg så blokeres man i 5 timer.

Men hvordan bygger man sådan noget op?
Avatar billede repox Seniormester
19. oktober 2017 - 12:45 #1
Det gør du med to tilgange.

Den ene er at registrere bruteforce attempts på den specifikke bruger.
Det er ret simpelt; hvis man forsøger at logge ind mere end x gange på det samme brugernavn, så bloker adgangen for brugeren i 24 timer (eller fem).

Den anden er at registrere generelle bruteforce forsøg; det kan du eksempelvis gøre ved at registrere antal af forsøge logins på en specifik IP. Når en IP har forsøgt at logge ind mere end x gange, så blokerer IP'en i 24 timer (eller fem).

Du kan med rolighed gøre det ved hjælp af et par MySQL tabeller (eller en enkelt endda).
Avatar billede cht22 Professor
19. oktober 2017 - 14:12 #2
Jeg tror ikke jeg vil låse mig fast på IP-adresser, der kan være nogen der har adgang til mange IP-adresser eller har en dynamisk IP-adresse der skifter ofte eller deler IP-adresse med andre. Der er muligvis ikke en måde der er den bedste, der vil være fordele og ulemper med de forskellige metoder.

Så det kan måske løses ved at oprette 2 ekstra kolonner i users tabellen, en der hedder logon_error_count og en der hedder banned_until, hvor banned_until indeholder så et tidspunkt for hvor længe der ikke er adgang. Det er måske heller ikke så smart for så kan den rigtige bruger ikke logge på, hvis der er nogen der nogen der forsøger at hacke sig adgang.

Så måske skal IP-adresserne bruges:

Der er oprettes en tabel (errorlogons)

Med kolonnerne:
userid, vartime, ip

Når brugeren logger på kontrolleres tabellen errorlogons for om der har været mere end 10 fejlforsøg indenfor seneste 24 timer og hvis der er det, så får brugeren ikke adgang fra den IP-adresse.

Så skal der gøres så poster i errorlogons der er ældre end 24 timer slettes ellers risikere man at det bliver langsomt.

Man kan vel evt. gøre så brugeren får besked hvis der er mange fejlforsøg (fra forskellige IP-adresser) så får brugeren besked på e-mail og eventuelt i indstilliger give brugeren mulighed for at blokere disse IP-adresser.

Er der andet man kan forebygge?
Avatar billede Slater Ekspert
19. oktober 2017 - 15:10 #3
Der er intet problem med at bruge IP-adresser. Ingen har en dynamisk IP der skifter tusinder af gange i sekundet, og en hacker skal have et ekstremt stort botnet for at have de millioner af forskellige IP'er der skal til at bruteforce noget.
Tænk på, at et password på bare 8 tegn vil kræve op til 167.961.600.000.000 forsøg for at gætte, hvis hackeren kan antage at der kun er store og små engelske bogstaver, samt tal. Er der også tegn i, bliver det mangedoblet.

Derfor er der så heller ingen der bruteforcer noget længere. Det er ikke en effektiv måde.
Avatar billede ejvindh Ekspert
24. oktober 2017 - 09:08 #4
Jeg har haft stor glæde af at følge denne vejledning da jeg skulle udforme mit eget brugerlogin. Det er nemlig ikke kun bruteforce, der kan være et problem:

https://www.wikihow.com/Create-a-Secure-Login-Script-in-PHP-and-MySQL
Avatar billede cht22 Professor
09. marts 2021 - 02:32 #5
Jeg har fået udarbejdet noget kode, så man blokeres hvis man laver mere end 10 fejlforsøg, fra samme IP-adresse indenfor 24 timer.
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

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