Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: DB desgin+funkcionalita proti brute-force

Aktivity
Avatar
Jiří Hrdina:7.9.2019 10:52

Dobrý den,

chtěl bych Vás moc poprosit o radu ohledně designu databáze proti brute-force útokům.

Moje momentální idea:
Tabulka v databázi login_attempt(id, ip_address, username, timestamp, succcess), kam se logují všechny pokusy o příhlášení (úspěšné/neús­pěšné).
Při každém loginu se zkontroluje, kolikrát uživatel za posledních 5mint se pokoušel přihlásit a pokud to překročí nějakou danou hranici (což je třeba 8 řekněme), tak by se mu měl dát ban.
Ted je otázka, jak navrhnout tu druhou tabulku.
Pokud bych ji pojmenoval ban (id, ip_address, timestamp start, timestamp end) a zkontroloval bych, jestli to uživatelské jméno existuje a jištak bych dal neaktivní účet na 1 den. Ale v té tabulce není vůbec zahrnuto username, což by bylo asi dobré tam zahrnout.
Další věc je, jestli ta tabulka ban by měla mít nějaký vztah (vazbu 1:N) s tabulkou user. Tady problém je, že ten username může být jméno, které v databázi (v user) neexistuje, takže to asi není úplně správný ne?

Jakým způsobem by to mělo být tohle správně navrhnuto?

Děkuji za pomoc

 
Odpovědět
7.9.2019 10:52
Avatar
Tomáš Novotný:7.9.2019 12:50

Ahoj, těžko říci co je správné. A až praxe často ukazuje, že některá řešení jsou lepší než jiná.... Osobně bych zkusil použít jen jednu tabulku a přidal ban status pro každý pokus, který ban stav vyvolá..
Pokud poslední pokus/nejmladší záznam má stav ban a od posledního pokusu neuběhlo více jak tebou zmiňovaný den, stav ban trvá, v opačném případě se nebere v potaz...
lze pak jednoduchým dotazem zjistit zda takový záznam pro daného uživatele vůbec existuje
snad je to srozumitelné :-)

Editováno 7.9.2019 12:53
Nahoru Odpovědět
7.9.2019 12:50
∞ ... the exact amount of possibilities how to deal with the situation ... so by calm, your solution is one of many
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:9.9.2019 7:32

V obou tech tabulkach chybi id uzivatele.
Pokud uzivatel neexistuje, bud zrusil ucet nebo nekde nastala chyba. To by si mel zkontrolovat admin, treba pri nalogovani mu to vypise podobne pripady. Pro ban script je to ignorovany radek.

Take se muze stat, ze zabanovany uzivatel zrusi ucet. Nebo se o to pokusi nejakym vlastnim scriptem. Nebo se muze stat, ze pred banem zrusi ucet. Coz je u chatu dost neprijemne, kdyz tam skodic-spammer otravuje a nedostane ban, protoze uz neexistuje. Ale tam se to resi pres IP.

Nevim, zda 8 pokusu je dost. V extremnich pripadech mam i 5 a vic. Ale po 4 to vetsinou vzdam a zacnu prohledavat zdroje, kde bych mohl mit heslo poznacene :)

 
Nahoru Odpovědět
9.9.2019 7:32
Avatar
Jirka Jr
Člen
Avatar
Odpovídá na Jiří Hrdina
Jirka Jr:11.9.2019 9:00

k tomu co psal Peter Mlich, dodavam .....

kdyz nevis, co dat do tabulky, tak na to jdi od konce (pristup prevzaty z test driven development / code first)

napis si v php asoc. pole vyplnene testovacimi daty s policky pro vyhodnoceni potencialniho utoku a rovnou si napis kod, ktery nad tim polem bude behat a vyhodnocovat utoky.

nebo klidne pole poli ... tj. tabulka radku, jakoby jsi ji mel vysledek db dotazu uz v phpcku.

az uvidis, jak ti krasne vsechno funguje nad testovacimi daty v php, tak zacni rozhazovat policka z testovaciho pole jako sloupce do tabulek.

neni to postup automaticky ... je stale treba popremyslet, co do ktere tabulky

ale dava to pohled z opacne strany a pomaha to tak v rozhodovani pri navrhu databaze

uvidis sam, jestli te tenhle postup chytne nebo odradi :-)

 
Nahoru Odpovědět
11.9.2019 9:00
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.