Vinnaren i pepparkakshustävlingen!
2021-03-13, 11:06
  #1
Medlem
Hur have ni löst det? Ex Max tre loginförsök och sedan behöva vänta ex 10 min. Försöker hitta en säker lösning.
Citera
2021-03-13, 11:16
  #2
Medlem
SittFints avatar
Du kan ha tre extra kolumner i databasen där du sparar tidsstämpel för senaste loginförsök för respektive användare.
Citera
2021-03-13, 11:19
  #3
Medlem
Citat:
Ursprungligen postat av SittFint
Du kan ha tre extra kolumner i databasen där du sparar tidsstämpel för senaste loginförsök för respektive användare.

Ny tabell eller användartabellen?
Citera
2021-03-13, 11:24
  #4
Medlem
SittFints avatar
Citat:
Ursprungligen postat av help
Ny tabell eller användartabellen?
Whatever works
Citera
2021-03-19, 17:44
  #5
Medlem
fnirps avatar
Citat:
Ursprungligen postat av help
Ny tabell eller användartabellen?

Om man har en separat tabell som loggar varje enskilt inloggningsförsök, blir databasbiten mer flexibel, än om du har tre extra kolumner.

Med en extra tabell, kan du göra analys på inloggningsmönstret för respektive person, med ip-nummer, var personen är osv och hitta avvikande beteende...

Logiken lägger du i vanliga koden, där den lätt kan ändras och tweakas så det blir exakt som du vill ha det.
Citera
2021-07-07, 21:46
  #6
Medlem
Citat:
Ursprungligen postat av help
Hur have ni löst det? Ex Max tre loginförsök och sedan behöva vänta ex 10 min. Försöker hitta en säker lösning.

Jag hade adderat två kolumner, en integer kolumn [default 0] (failed_login_attempts) och en timestamp kolumn [default null] (deny_login_until) där du lägger datum och tid för när denne kan försöka igen.

1. Vid ett felaktigt inloggningsförsök kör du en incremet (+1) på failed_login_attempts

2. När man gjort 3 felaktiga inloggningsförsök sparar du en timestamp (dagens datum och tid + 10 minuter) i deny_login_until

3. Vid ett inloggningsförsök kontrollerar du först om tiden just nu är lägre än kolumnen deny_login_until

4. Vid ett inloggningsförsök som är korrekt kör du en reset och uppdaterar deny_login_until till null och failed_login_attempts till 0


Men lösningen ovan har du ett snurrande flöde med en simpel logik som inte är allt för komplex att implementera.

Lite sent svar, men tänkte ge min tanke till övriga som letar efter något liknande.
Citera
2021-07-07, 22:54
  #7
Medlem
Mysquos avatar
Jag hade gjort som föregående, fast hade lagrat deny_time (tidpunkt för när man misslyckats för många gånger och blivit låst) och failed_attempt_count (antal misslyckade inloggningar).

Sedan hade man haft någon konstant eller system property där man definierar hur många misslyckade försök man har på sig och hur länge man blir utelåst. Då kan man enkelt justera reglerna utan att behöva ändra på alla användare.

Sedan kan man lägga till fler parametrar. Hur många gånger kontot blivit låst och sedan upplåst utan en lyckad inloggning mellan. För varje gång detta inträffar kan man utöka tiden för låset, så att kontot blir låst längre och längre tid.
Citera
2021-07-07, 23:08
  #8
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av help
Hur have ni löst det? Ex Max tre loginförsök och sedan behöva vänta ex 10 min. Försöker hitta en säker lösning.
Håller med om ovanstående, men funderat på tvåfaktorsautensering?
Rätt lätt att sätta upp med mail-varianten.
Citera
2021-07-08, 02:11
  #9
Medlem
Det har skrivits väldigt mycket om detta på olika säkerhetsforum tidigare. Kontentan är att du helst inte vill blockera en användare att logga in oavsett vad. Målet kan nämligen vid en "attack" kan vara att hindra en annan användare att logga in och inte nödvändigtvis komma åt sparad information.

Istället för att begränsa en användare logga in, försök göra följande:

- Kräv extra authentisering, via t.ex skicka en engångslöenord via t.ex e-post eller SMS om många inloggningsförsök har nyligen gjorts. Du har troligtvis denna informationen ändå för konto-återställning.

- Lägg till en fördröjning så att om det har skett ett inloggningsförsök nyligen, vänta 5 sekunder innan du utför förfrågan. Eller gör det ännu mer simpelt, gör så varje inloggningsförsök tar minst 1 sekund. Enda syftet är att med detta fördröja en "brute-force".

- Begränsa antalet inloggningsförsök per sekund till N st (beroende på hur många användare du har idag). Syftet är att du ska kunna blockera om någon kör ett program som kontinurligt testar olika användarnamn/lösenord. Du vill inte tillåta att varenda användare kan logga in exakt samtidigt.


Om du tvekar att alltid tillåta användare att logga in, tänk vad t.ex som skulle kunna hända om du var en konkurrent till ett SaaS-företag och de hade den lösningen, att blockera alla inloggningsförsök efter N antal misslyckade försök. Jag kan garantera dig att det skulle vara enkelt att välja ut kund efter kund och få dem "missnöjda" och därefter sälja in din egen lösning
Citera
2021-07-26, 21:12
  #10
Medlem
Callebiltes avatar
Det bästa är som påpekats ovan att göra en helt ny tabell där du sparar användar id, logintime i sek (den som visar tid i sekunder sedan unix skapades(?)) sedan kan du spara tex IP adress.

Jag gör så att jag låser inloggningen i en minut efter 5 felaktiga försök men jag skriver inte ut någon information om detta men skickar ett mail att kontot är låst en minut.

Tanken är att om någon bruteforcar eller kör enl lexikon eller andra tabeller så kommer de de bränna 5 inloggningsförsök på 1 millisekund och sedan 50000 ord under den minuten kontot är låst sen 5 försök o bränna 50000 nya ord... Visst de kan ha flyt o pricka rätt ord i ett av de intervallen när de har 5 försök på sig men det är nog större chans att träffas av blixten samma dag man vinner på lotto...
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback