Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: ohnic 20. 03. 2012, 12:00:27
-
Mám problém s captchou v PHP, Joomla.
Představte si následující fragment kódu:
...
$code = generateCode();
generateImage($code); // pouziva GD, nakonec zavola: header('Content-type: image/png'); imagepng();
$_SESSION['captcha'] = $code;
exit();
(někde předtím je taky session_start();)
Session se ukládá do databáze. Když se tenhle kód zavolá při načítání stránky (tedy v jednom TCP spojení se zbytkem stránky), data do session se neuloží (přesněji session zůstane nezměněna - jsou v ní i jiné věci), ani se neuloží do jíne session (ověřeno dotazem do DB). Když pak user na stránce nechá vygenerovat novy kód (generování obrázku v extra TCP spojení), data do session se uloží.
Měl by někdo tip, v čem by mohl byt problém?
Díky moc.
Ohnic
-
koukni do error logu webserveru
-
V error logu nic není. Tedy nic relevantního.
Ještě (možná) důležitá informace, na kterou jsem předtím zapomněl: Já vyvíjím na Linuxu a mě vše funguje dobře (Firefox). Problém se vyskytuje na widlích (XP, 7, prohlížeče IE8, IE9, Firefox, Opera). Na widlích jsem Wiresharkem ověřoval, že na server jsou stejné cookies, a fakt jdou.
-
Teď mi to moc nemyslí, ale co přidat k tomu headeru ještě další:
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
-
Díky za reakci. Něco takového tam mám - v tom problém není. Problém je, že se ta captcha neukládá do session. Pro jistotu jsem tam přidal ukládání do souboru, a to se ukládalo, takže ten obrázek se skutečně generoval. Jen se neuložilo do session.
-
a pokud se to ukládá do db, nemůže tam být nějaká kolize, když v tom samém okamžiku ukládá ta základní stránka i ten obrázek do té session?
-
Díky za reakci.
To je možné. Nakonec jsem to obešel tak, že to neukládám do session ale do vlastní tabulky. Není to moc čisté, ale alespoň to funguje.
-
Dovolím si jiný úhel pohledu. Před nějakou dobou jsem taky řešil implementaci ochrany proti spamu, ale s ohledem na přívětivost se mi osvědčilo uživatelsky přístupnější řešení otázkami, jako je i tady na root. Sebesložitější obrázkové captchy se dají velmi snadno louskat v indii po desítkách za dolar a kolikrát i skutečný uživatel musí obrázek opisovat několikrát. O tom, že byste měl přidat i audiostopu pro nevidomé/slabozraké nemluvě.
Otázky typu "první měsíc v roce", nebo "jedna plus jedna číslicí" jsou dostatečně odolné, dokud nebudou vyhledávače schopny generovat odpovědi na otázky. (Jen si ověřte, že wolfram alpha na otázku správně neodpoví :D).
Na druhou stranu, obrázkovou captchu inteligentní člověk dokáže vyplnit, i pokud je text stránky v japonštině, případně prohnaný automatickým překladačem. Je tedy otázka, co captchou chráníte a s jakými jazykovými schopnostmi návštěvníků počítáte.
-
S předchozím příspěvkem souhlasím, jen bych dodal, že já mám diskuzi bez spamu a nemám tam ani captchu ani žádné otázky, ani povinný náhled před uložením. Jde to řešit i bez jakéhokoliv pruzení lidí nějakými nesmysly, ale domnívám se, že je to o otázce jedinečnosti ochrany, pak se totiž spamerům nevyplatí věnovat čas prolomení této ochrany, když je jen na jednom webu.
-
nezapomněl jsi na session_register("captcha")?
-
session_register() je zastaralá (5.3) a odebraná (5.4).
-
problem je zcela jiste v konkurencim pozadavku na uloziste session..