Autor Zpráva
kuba123
Profil *
Jak jsem tu už psal, chci dát na Webzdarma sezbamku pro menšinovou komunitu. Mám na těch stránkách Captcha, ale nevím jaký stupeň obtížnosti nastavit, aby to neuhádly boti. Jelikož z jiného fora jsem slyšel o problému, že prý jim boti ti kódy opisovaly nebo obcházeli, zkrátka jim ta ochrana nestačila a na forumu se jim stále vytvářeli nové účty od botů...

Na to captcha je nějaká třída s funkcí
function VerifyImage($long=6,$lx=120,$ly=30,$nb_noise=20)
No a mě by zajímalo jakou nastavit obtížnost.
První dotaz. Mám dát Captcha i na přihlašování? Třeba jenom 3 nebo 4 znaky? Jinak pro registraci bych dal captcha nějaký náročnější (více znaků třeba 6). Ale zase jakou nastavit čitelnost, aby to lidi ještě přečetli. Jaké jsou Vaše zkušenosti s tímto?

No a dále bych chtěl pro jistotu ještě přidat nějakou kontrolní otázku, která se vygeneruje na základě datumu, pokaždé jiná (v zásobě by bylo například 10-15 otázek) ve stylu "kolikslovjevtetovětě?". Tak mě napadlo jestli už na to není na netu nějaký hotový kód.
jenikkozak
Profil
Captchu považuji za tak extrémně otravný způsob, že bych ji určitě nedoporučoval považovat preventivně, ale až v případě, že všechna přijatelnější řešení selžou.

No a dále bych chtěl pro jistotu ještě přidat nějakou kontrolní otázku, která se vygeneruje na základě datumu, pokaždé jiná (v zásobě by bylo například 10-15 otázek) ve stylu "kolikslovjevtetovětě?".
To je sice těžká otázka, ale je jednoduché na ni odpovědět. Roboti zkoušejí do pro ně neznámých políček nějaké hodnoty doplňovat. Pokud se takový robot na webu objeví, číslo 6 uhodne velmi snadno.
Chtěl jsi přidat captchu a ještě tohle? To by fungovat mohlo. Budeš vědět, že když to někdo vyplní, bude nejspíš spolehlivě robot. Protože člověka to spolehlivě odradí. :)

Mám dát Captcha i na přihlašování?
Určitě ne. Jaký by tam měla význam?
Chamurappi
Profil
Reaguji na kubu123:
Mám dát Captcha i na přihlašování? Třeba jenom 3 nebo 4 znaky?
Předpokládáš, že se nějaký robot pokusí nabourat do existujících účtů? To mi nepřipadá moc pravděpodobné.

Pokud nehrozí útok cílený přímo na tvůj web, nemusíš používat žádnou CAPTCHu. Když jsi teď psal do této diskuse, dokonce jako neregistrovaný, nutil tě tu snad někdo opisovat obrázek? Můžeš se inspirovat.


Reaguji na jenikkozaka:
Captchu považuji za tak extrémně otravný způsob
Třeba jsou tou menšinovou komunitou, pro níž bude seznamka určená, milovníci CAPTCHA obrázků. Každý den se seznámí s novým druhem kódu v obrázku.
margin
Profil *
jenikkozak:
kolikslovjevtetovětě
Tak mě napadlo, co tak doplňte mezery do "kolikslovjevtetovětě". S tím budou mít problém i indové s překladačem.
Str4wberry
Profil
Neřekl bych.

kuba123
Profil *
Chamurappi:
Na co se v té diskusi mám zaměřit? Zatím mě žádný odkaz nedovedl k žádnému příkladu s kódem a vysvětlením jak ho použít.

Str4wberry:
Moje předpoklady jsou zbourány. A co kdybych použil toto:
<div id=ochrana><span>Klikni</span><span>na</span><span>cervene</span><span>policko</span>
</div>
<input type=hidden name=notselected>
A k tomu udělat JS script, který označí určité políčko podle toho jaké je datum. Po kliknutí se dosadí hodnota do skrytého prvku a ta se pak ověří po odeslání formuláře přes php.
Str4wberry
Profil
Asi takhle – proti spamujícím robotům stačí jednoduchá JS ochrana (využívá se toho, že robot neumí JS) – jako se používá na této diskusi.

<p id="spamprotirobotum">Ochrana proti spamu. Napište prosím číslo dvacet-čtyři: <input type="text" name="robot" value="" id="protirobotum"></p>
<script>
/* tento skript vloží do příslušného políčka  */
document.getElementById("protirobotum").value="24";
document.getElementById("spamprotirobotum").style.display = "none";
</script>

Ochrana před živými cizokrajnými spammery je o poznání složitější. S Google vyhledávačem a překladačem není problém většinu hádanek rozlousknout i bez znalosti dané řeči.
kuba123
Profil *
Str4wberry:
Tak jestli je tenhle kód vše co potřebuji tak ho s dovolením beru. Proč tam ale je ten text "Ochrana proti spamu. Napište prosím číslo dvacet-čtyři: " když ho nikdo nečte?
Str4wberry
Profil
Čte ho pochopitelně serverový skript po odeslání formuláře.
jenikkozak
Profil
A ten text čtou uživatelé s vypnutým JS.
kuba123
Profil *
Ta hodnota 24 je vždycky stejná nebo se to občas mění?
Str4wberry
Profil
Za těch 7 let, co tu tato ochrana je, se změnila jednou. A s automatickým spamem tu není vážnější problém.
kuba123
Profil *
Zní to docela jednoduše. Na těch stránkách kde to chci rozjet je ale možná bezpečnostní díra. Jelikož tam používají registr_globals. Je tam soubor security.inc.php, který se díru snaží vyřešit takto:

if(!defined("C_URL")) die('Can`t access file directly!');

# Fixing possible security hole in register_globals = on
if (isset($_SESSION)){while (list($name, $value) = each($_SESSION)){unset($$name);};};
if (isset($_COOKIES)){while (list($name, $value) = each($_COOKIES)){unset($$name);};};
if (isset($_ENV)){while (list($name, $value) = each($_ENV)){unset($$name);};};
if (isset($_FILES)){while (list($name, $value) = each($_FILES)){unset($$name);};};
if (isset($_SERVER)){while (list($name, $value) = each($_SERVER)){unset($$name);};};

No a já si myslím, že kdyby si tu stránku s formulářem (registrace a hledání) někdo uložil, zeditoval tak, aby tam ten input měl vyplněný jako
<input type=hidden name=robot value=24> 
<input type=hidden name=C_URL value=http://adresastranek.wz.cz> 
pak může odesílat libovolné množství spamů. Nejsem si stopro jistý, ale zdá se mi že to tam není dobře vyřešené.


Třeba jako teďka sem odešlu příspěvek ze stránky uložené na disku a nepoužiju javascript k nastavení prvku robot.
martin1312
Profil
kuba123:
musíš ale rozlišovať útok spambotov a cielený útok na formulár
kuba123
Profil *
Nemělo by se tedy porovnat jestli hodnota
$_SERVER[SCRIPT_FILENAME] odpovídá té adrese na které se provozuje server?


Tím bych ochránil i ten formulář.
martin1312
Profil
$_SERVER[SCRIPT_FILENAME] ti ale vráti názov aktuálne vykonavaneho súboru, teda toho, ktorým sa ten formulár spracúva.
kuba123
Profil *
Teoreticky by jste měli vidět na serveru pod $_SERVER[SCRIPT_FILENAME] že jsem ten formulář odeslal z "C:\Documents and Settings\můj účet\Dokumenty"
Chamurappi
Profil
Reaguji na kubu123:
Adresa, ze které byl formulář odeslán, bývá v HTTP hlavičce Referer. Je to informace dobrovolně sdělovaná prohlížečem, takže robot disponující schopností lhát ji klidně vyplní tím nejpodlejším možným způsobem.

Jak jsem již psal, pokud nehrozí cílený útok proti tvému konkrétnímu webu, stačí podobně triviální řešení, jako máme tady.
Pokud cílený útok hrozí, budeš muset svojí vynalézavostí překonat odhodlání útočníka, k čemuž občas nestačí ani CAPTCHA.
kuba123
Profil *
Chamurappi:
Robot ale neví v kterém adresáři jsou umístěny stránky. Takže nevím jak by tu informaci Referer uhádl... Řeším to kvůli tomu, že se obávám, že by bylo možné obejít to přihlašování a autentizaci uživatele.
Chamurappi
Profil
Reaguji na kubu123:
Robot to ví úplně stejně, jako to může vědět návštěvník a jeho prohlížeč. V Refererovi bývá obyčejná URL. Některé prohlížeče umožňují v rámci ochrany soukromí posílání Referera vypnout.

se obávám, že by bylo možné obejít to přihlašování a autentizaci uživatele
Pokud tomu dobře rozumím, ještě nemáš hotový web (=> žádnou návštěvnost), ale už vymýšlíš postupy, jak se bránit proti sofistikovanému útoku spamovacích robotů zacílených přímo na tvé dílo i za cenu snížení komfortu obyčejných uživatelů. Nejsem si jist, že máš dobře uspořádané priority.
kuba123
Profil *
Chamurappi:
Nejsem si jist zda mi rozumíš co chci říct. Chceš říct, že server odesílá prohlížeči informaci o tom kde se nachází umístění stránek např. http://mujweb.wz.cz
tedy např. takovouto hodnotu?
/3w/wz.cz/m/mujweb
Chamurappi
Profil
Reaguji na kubu123:
Neodesílá. Ale ani ji pak nepřijímá, v Refererovi je opravdu obyčejná URL.

tedy např. takovouto hodnotu? /3w/wz.cz/m/mujweb
Takováto hodnota ti neříká vůbec nic o tom, z jakého místa byl formulář odeslán. To je předpokládám ten $_SERVER[SCRIPT_FILENAME], o kterém ti už martin1312 psal, že ti k ničemu není.
martin1312
Profil
Ja by som zhrnul, čo používam na ochranu formulárov:

1. Ochrana pred automatickými spambotmi:
Do formuláru pridám 2 hidden inputy, v jednom je aktuálny čas a v druhom nie je nič a je pomenovaný napríklad name="url". Po odoslaní kontrolujem, či je čas od vygenerovania formuláru po odoslanie aspoň 5 sekúnd (prípadne ako si už zvolíš) -> predpokladám, že spambot odošle formulár v radoch milisekúnd po vygenerovaní a ďalej kontrolujem, či je $_POST['url'] prázdne, pretože predpokladám, že spambot by ho vyplnil. Ešte dodám, že ten name="url" je obyčajný input type="text" a skrývam ho cez CSS.

2. Ochrana pred odoslaním z inej adresy:
Tu je asi jediné spoľahlivé riešenie generovať token do hidden inputu a uložiť do Session, po odoslaní skontrolovať či súhlasia a vymazať zo Session. Sú s tým spojené problémy ako nemožno pracovať s viac záložkami v prehliadači, preto je to lepšie riešiť cez databázu a ukladať napríklad posledných 30 tokenov. Musí platiť, že každý token môže byť použitý iba raz a hneď ho vymazať.
kuba123
Profil *
Chamurappi:
Ale vždyď jsem to říkal. To ty si začal mluvit o Refererovi.

#15 · Zasláno: Včera, 12:26:36 · Upravil/a: kuba123
Odpovědět Citovat
Nemělo by se tedy porovnat jestli hodnota
$_SERVER[SCRIPT_FILENAME] odpovídá té adrese na které se provozuje server?



jo no, martin1312 psal, jenže já potřebuju vidět spíš konkrétní příklad, konkrétní hodnotu, abych si byl jist, zda si rozumíme.


Zatím co jsem z diskuse pochopil je to že klient hodnotu $_SERVER[SCRIPT_FILENAME] nezná
martin1312
Profil
$_SERVER[SCRIPT_FILENAME] ti je úplne na nič, neviem si predstaviť s čím to chceš overovať, jedine vypísať do hidden inputu vo formulári a odoslať ale to sme tam, kde sme nechceli byť, pretože to potom stačí iba skopírovať zo zdrojáku vygenerovanej stránky s tým formulárom.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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