Geek tričko zdarma Geek tričko zdarma
Hledáme grafika na pohodovou brigádu v Blenderu nebo programátora na hry v PyGame. Máš zájem? Napiš nám na redakce [zavináč] itnetwork.cz!
Tričko zdarma! Stačí před dobitím bodů použít kód TRIKO15. Více informací zde
Avatar
Jiří Hrdina:7. září 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. září 10:52
Avatar
Tomáš Novotný:7. září 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. září 12:53
Nahoru Odpovědět 7. září 12:50
∞ ... the exact amount of possibilities how to deal with the situation ... so by calm, your solution is one of many
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:9. září 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  +1 9. září 7:32
Avatar
Jirka Jr
Člen
Avatar
Odpovídá na Jiří Hrdina
Jirka Jr:11. září 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. září 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.