Autor Zpráva
World
Profil
Zdravim,
Chtěl bych se zeptat jestli nevíte o nějakým tutoriálu nebo jestli nemáte někde nějaký přiklad na zamražení účtu (proti nabourávání se na cizí účty, např. když 3x zadám špatně přihlašovací údaje, aby mi to na 1h zamrazilo účet)

Upřesním co přesně chci:
Když uživatel 3x špatně zadá přihlašovací údaje tak se mu v databázi nastavit položka frozen_account na aktuální čas + 1h
=>na hodinu se mu zamrazí účet
a rovněž se mu nastaví failed_logins na 0, aby po uplynutí té 1h mu to zase nezamrazilo účet.
-když bude účet zamražený tak aby vyskočila chybová hláška a script se zastavil

něco už jsem udělal, můžete mi pomoct to dokončit? díky moc ;)

//kontrola, kolikrát již byly špatně zadány přihlašovací údaje
//pokud bude výsledek 3, tak se script zastaví a vypíše se chybová hláška a účet se na 1 hodinu zamrazí
$failedlogin = $db->sql_query("SELECT * FROM account WHERE account_name='$accountname' AND failed_logins='3'");
if($db->sql_numrows($failedlogin) == 1){
$db->sql_query("UPDATE account SET failed_logins='0', frozen_account=NOW() + INTERVAL 60 MINUTE WHERE account_name='$accountname'");
include("header.php");
$error_msg = "<font class="error">"._ACCOUNT_FROZEN."</font>";
login_form();
include("footer.php");
exit();
}


a jeste jsem se pak pokusil o porovnání těch časů, jestli už to může uživatele pustit nebo ne, ale to mi jaksi nefunguje, a navíc bych potřeboval dát ty oba scripty do sebe, protože když tento script dám před ten první, tak se ten první neprovede

$sql1 = $db->sql_query("SELECT NOW() FROM account WHERE username='$username'");

$sql2 = $db->sql_query("SELECT frozen_account FROM account WHERE username='$username'");

if($sql1 < $sql2){
$frozen2 = $db->sql_query("UPDATE account SET last_failed_login='0000-00-00 00:00:00', frozen_account='0000-00-00 00:00:00' WHERE username='$username'");
}else{
include("header.php");
$error_msg = "<font class="error">"._ACCOUNT_FROZEN."</font>";
login_form();
include("footer.php");
exit();
}
jonge
Profil
World
Spíš bych se hlásil k variantě se zabanováním IP adresy než se zablokováním účtu. Takto by mohl kdokoliv komukoliv zablokovat účet pokud by pouze znal jeho uživatelské jméno, což asi není dobré ;o)
World
Profil
To právě nechci, protože dost lidí je třeba na síti s 50lidmy a když zablokuju jednoho, tak zablokuju účet všem.

Ale ban system mam již vyrešený, mě jde o zamražení účtu. Chápu, že by toho mohli někteří lidé využívat, ale tak tam dám upozornění ať nikomu svoje přihlašovací údaje nedavají a myslím si, že určitě nikdo nebude čekat vždy až se dotyčnému účet "odmrazí" aby mu ho mohl zase "zamrazit".
YoSarin
Profil
World
A o jaký systém jde? Opravdu nejde uživatelské jméno "kohokoli" nějak zjistit?
World
Profil
Ne žádným způsobem by to nemělo jít, nikde nepublikuji žádný seznam uživatelů. Ukázku bohužel nemůžu poslat, protože si to kutím zatím na localu, ale ukázka myslim není potřeba, stačí když vim že už. jméno se nedá zjistit :)

edit:a žádné zapamatování už. jména taky nemám
TomAsQo
Profil
co sa toho zamrazenia tyka, by som poradil po 2 zlych pokusoch zamrazit ucet na 5 minut(bruteforce vyluceny a nikoho to neobmedzuje, prinajhosrom user pocka tych 5 minut ;-])
World
Profil
TomAsQo

Dobrý nápad, pokusim se to nějak realizovat, v brzké době nejspíše pojedu pryč, ale možná to stihnu, takže se potom ozvu, jak jsem dopadnul, ještě jednou dík ;)
World
Profil
hm stále nevim proč mi toto nefunguje:

$sql1 = $db->sql_query("SELECT NOW() FROM account WHERE account_name='$accountname'");
$sql2 = $db->sql_query("SELECT frozen_account FROM account WHERE account_name='$accountname'");

if($test1 > $test2){
$db->sql_query("UPDATE account SET last_failed_login='0000-00-00 00:00:00', frozen_account='0000-00-00 00:00:00' WHERE account_name='$accountname'");
}else{
include("header.php");
$error_msg = "<font class="error">"._ACCOUNT_FROZEN."</font>";
login_form();
include("footer.php");
exit();
}

možná špatně označuju ty hodnoty času z db, máte nějakou radu?
Toto téma je uzamčeno. Odpověď nelze zaslat.

0