Autor Zpráva
Flek
Profil
Dobrý den,
řeším problém, tedy jde spíše o neznalost, ale proto se obracím na vás. Při neúspěšném přihlášení, ukládám pokus o přihlášení do databáze (id, time(timestamp), ip, email). A já potřebuji spočítat pokusy o přihlášení dejme tomu v rozmezí jedné hodiny.

Děkuji za pomoc.
joe
Profil
1. Patří to do databáze
Moderátor Chamurappi: Přesunuto.
2. Nedělej to, není to dobrý nápad, protože IP adresa není jedinečná.
php
Profil
Jestli to chápu dobře, podle nadpisu, tak to potřebujete udělat proto, aby když budete mít v databázy třeba 1000 neúspěšných přihlášení, tak aby se změnila captcha, protože nějakej robot jí dokázal obejít?
Myslím, že by bylo lepší rovnou automaticky vybrat, při jakémkoliv zobrazení stránky, náhodnou captchu nebo místo captchy použít otázku - přes tu robot nedokáže projít, teda ještě sem se nesetkal s tím, že by nějaký prošel. Pak si můžu definovat víc otázek a náhodně je zobrazovat a dokuť člověk neodpoví správně na otázku, tak neodesílat formulář do DB.
Flek
Profil
joe:
1. - Omlouvám se, chtěl jsem to počítat pomocí PHP, poté mi došlo že to nejspíš pujde i pomocí MySQL a bude to nejspíš výhodnější.
2. - Vím že není jedinečná, mám tam ještě user_agent, jde o malinkou stránku.

php:
Ne, ta captcha tam defaultně není, zobrazí se až po 5 neúspěšných přihlášení.
php
Profil
joe:
2. Nedělej to, není to dobrý nápad, protože IP adresa není jedinečná.
K tomu bych jen doplnil, že ikdyž IP adresa není jedinečná, tak se dá snadno zjistit, u většiny případů, v jakým rozsahu IP adres se dotyčný může pohybovat, a dokut si nezmění poskytovatele internetu, tak můžu celý tenhle rozsah IP adres zakázat, dá se to ovšem použít jen ve specifických případech, tzn. že nemůžu zakázat rozsah IP adres, který popužívá třeba T-mobile pro ČR, pokud budu mít web určený český veřejnosti. A taky to není úplně šťastný řešení, už jen kvůli tomu, že IPv4 má až 4 228 250 625 kombinací nemluvě o IPv6, ta se ovšem zatím ještě moc nepoužívá, ale do blízké budoucnosti je nutností.
Marek88
Profil
A co kdybyste mu radši odpověděli na otázku...?!
[#1] Flek:
Tedy máš dvě verze řešení pro dva druhy timestamp. Je to teda příklad na mazání starších než... Ty chceš vybrat (takže SELECT) novější než..., takže přehodíš znaménka neroznosti a upravíš si čas...
EDIT: Do WHERE je ještě potřeba doplnit porovnání IP a emailu... Asi nějak takhle:
SELECT count(*) as pocet FROM tabulka WHERE time > (UNIX_TIMESTAMP() - 3600) AND  ip="$ip_uzivatele" AND email="$prihlasovaci_email";
SELECT count(*) as pocet FROM tabulka WHERE time > (NOW() - INTERVAL 60 MINUTE) AND  ip="$ip_uzivatele" AND email="$prihlasovaci_email";
Flek
Profil
Marek88:
Děkuji, druhý příklad se mi podařilo zprovoznit.

SELECT count(*) as pocet FROM tabulka WHERE time > (NOW() - INTERVAL 60 MINUTE) AND  ip="$ip_uzivatele" AND email="$prihlasovaci_email";


Ještě jednou díky. :)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0