Přeskočit na obsah

Hledej:


elfineer | blog

Je 1. zari, takze Google TV reklama se tyka maturity z cestiny :)
twitter.com/elfineer


zář 06 04

Můj boj s Holanďany (update)

Datum a čas pondělí 4. září 2006, 22:55
Tagy sudoku webdesign css javascript bookmarklet programovani
Komentáře 8 (přejít na komentáře, přidat nový, sledovat pomocí RSS)
Přečteno 3051×
Popis Začátkem srpna jsem spustil server One-Sudoku.com – přišlo mi to jako poměrně zajímavý nápad, ne moc pracná realizace a lehce zapamatovatelná doména byla volná. Je pravda, že podobných webů pár existuje, například Sudoku League, ale svůj web jsem myslel spíš jako web, na kterém si můžete v práci zahrát sudoku a jako bonus je zde žebříček, než nějakou supersoutěž.

Náhled One-Sudoku.com

Protože tam je žebříček zemí, očekával jsem nějaké pokusy o manipulaci (jako např. u seti@home, i když samozřejmě v menší míře), ale čekal jsem spíš například SQL injection při úpravě bodů apod. Před řešením nějakého šikovného studenta (nejspíš informatiky) z Nizozemí ovšem smekám.

Maks napsal jednoduchý bookmarklet, který si stačilo přetáhnout do oblíbených, otevřít můj web a spustit. Maks je kluk šikovná, celé to má 1 kB a funguje mnohem rychleji než jiné javascriptové solvery.

Zdrojový kód první verze Maksova bookamerkletu

Asi bych si toho nevšimnul, kdybych neměl radost z nárustu návštěvnosti a ve statistikách serveru nepátral po tom, kdo na mě odkázal :-) (takový podvod mě nenapadl, naivně jsem myslel, že se o mě zmínil nějaký NL blog, takže není nic divného na tom, že NL se vyhouplo z 23. místa na 4. během jednoho dne).

Nápad to byl vážně dobrý, protože opravdu to byli hráči z různých IP adres, v různých časech a bylo vidět, že nic podezřelého se databázi nestalo.

Moje řešení bylo poněkud naivní. Bookmarklet přistupoval vždy na input 1–1, 1–2… 1–81, jak se jednotlivá políčka jmenovala. Navíc by si asi Maks v JavaScriptu neškrtl, kdyby zadání nebylo jako input se zablokovaným vstupem, ale jako obyčejný text (já zvolil radši input, protože se to pak lépe stylovalo). Změnil jsem jméno políček na -1…, přičemž dlouhý hnusný kód byl generován jako číslo obsahující datum, čas, kus IP adresy a z toho md5 otisk. Tento kód se pak v SESSION předal stránce s kontrolou, aby věděla, na jakých proměnných řešení hledat.

Náhled One-Sudoku.com

Ozkoušel jsem bookmarklet, zaradoval se, že už nejde, vymazal z databáze všechny podezřelé hráče z NL, poupravil počet bodů a šel s pocitem dobře odvedené práce koukat na ordinaci :).

Maks byl asi ten den v lepším duševním stavu, protože na jeho webu už byla při druhých reklamách odpověď (v. 1.3) a Makse rychle napadlo, že na políčka formuláře lze přistupovat nejen podle jména, ale i podle indexu.

Mojí odpovědí bylo velmi provizorní vložení

<input type="hidden" name="fuck_you_maks" />, které překonal velmi rychle (v. 1.4, 1.5), a po něm <input type="text" name="..-82" />.

Když bookmarklet v. 1.5 nefungoval, začínal jsem mít dobrý pocit, jak ho to konečně přestalo bavit a jak jsem vyhrál. Dokonce i web smazal.

Trvalo mi ‚jen‘ asi 24 hodin, než mi došlo, že smazaná stránka by měla hlásit 404 Page Not Found a ne 403 Forbidden. Chyba 403 by dávala smysl, kdyby odkaz vedl na adresář, ze kterého zmizel index.html (či obdoba), ale ne, když odkaz vedl rovnou na .html.

Makse asi napadlo, že když doména patří podle výpisu někomu z ČR a někdo z ČR se poměrně často kouká na jeho web, asi nebude špatný nápad ho v .htaccessu zablokovat.

Anonymyš prozradila existenci verze 1.6, která víceméně fungovala až do dnešního večera.

Zatím poslední řešení se mi moc nelíbí a možná se na něj najde odpověď v JS: třetí řádek je falešný, obsahuje vždy náhodně vygenerovaná čísla 1..9 a inputy se stejnými jmény jsou zde ještě jednou – při odeslání formuláře se tak odešlou ty nižší (pozdější), ale pokud bude bookmarklet přistupovat podle indexu nebo jména, dostane náhodné hodnoty z vyšších (dřívějších, falešných). Celý třetí řádek je pak pomocí CSS schován.

Vadí mi na tom, že to je poměrně nepřístupné řešení – sice nemyslím, že by někdo s hlasovou čtečkou hrál na mém webu sudoku, ale třeba PDA/mobil falešný řádek neschová.

Pokud tohle maks překoná, mám připravené ještě jedno řešením, které už je snad nepřekonatelné (alespoň ne čistě v JS). V každém řádku bude jedno falešné políčko a to, jestli se má schovat, určí CSS soubor vygenerovaný PHP skriptem (opět dostane v SESSION vědět, co zrovna tento uživatel má vidět). Nebudou se tam pak žádná jména opakovat, políček bude z pohledu HTML devadesát a bez přečtení CSS nepůjde poznat, jestli je pravé nebo falešné.

Ale doufám, že až na to nedojde :-)…

Statistiky serveru

Update (den poté)

Asi nejsem sám, kdo se umí kouknout do statistik :-). Teď je ten web zablokován nějak lépe, nedá se tam dostat ani přes anonymizéry ani přes nějaké proxy z proxy4free. Tak budu chvíli doufat :-).

pátek 4. září 2006, 22:55 - 3051× shlédnuto - RSS komentářů - tagy: sudoku webdesign css javascript bookmarklet programovani

Odkazy na nové články naleznete také na Twitteru: @elfineer

Nezapomeňte si mě přidat do své RSS čtečky, pokud se Vám článek líbil - URL RSS kanálu: http://blog.elfineer.cz/rss.xml (Add to Google).

Nepřehlédněte

sunW39 - úterý 5. září 2006, 13:14 - #

dost strasny reseni.ale lepsi me nenapada

elfineer - úterý 5. září 2006, 16:13 - web - #

No ještě by šlo generovat obrázek na pozadí nebo celý ve Flashi, ale to teda nikdy :)

Fred - středa 6. září 2006, 16:23 - web - #

Díky za skvělou zábavu. Nemám tak dobré znalosti js, nicméně jsem si našel nějaké scriptíky, které jsem použil a chvíli (8 hodin) jsem si s tím hrál. Výsledek je tady http://xy.wz.cz/…ple­7/sudoku/ , není to tak elegantní jako Maksův bookmarklet, který ty data tahal rovnou ze stránky, ale dá se to s tím ošidit velmi rychle. Stačí přetáhnout přes tabulku se sudoku a vyplnit. Má to autonextfocus a na prázdné pole se používá mezerník. Asi bych měl přidat ješte nějaký resizer. Hrál jsem si s tím jen proto, že mi snaha odolat takovýmhle útokům připadala marná. Spíš by to chtělo asi nějaký text, jako Zamyslete se nad sebou a buďte poctiví. Kdyžtak mě rovnou smažte z databáze z dnešních výsledků, byl to pouhý test.

elfineer - středa 6. září 2006, 19:36 - web - #

Teda… :) Fakt dobry… No je jasny, ze prepsanim do jakyhokoliv solveru to vyresit jde, i kdyz tys to povysil na vyssi uroven :).

Nejak moc se tomu branit neda, nejak moc tu databazi procesavat nebudu, u me nejlepsi stejne nic nedostane. Jen jsem nechtel, aby to Maks a spol. resili jednim tlacitkem.

pan Cuketka - čtvrtek 7. září 2006, 00:45 - web - #

…docela ftipný. já soobně bych je zrušil natvrdo, holandsko prostě z žebřícku vyřadil + přidal nějakou pěknou provokativní formulku s holandskou vlakou „holanďanům sudoku luštit zakázáno“ ;)

Fred - čtvrtek 7. září 2006, 09:15 - web - #

Na ten web se taky nemohu dostat, ale koukám, že sem chodí docela často nějaký heaven student. zajímavé Maksův scriptík byl na hell student…, že by Jekyll & Hyde ;-)

mka - středa 20. září 2006, 16:09 - #

A co takhle zkusit to jinak – at si to klidne nekdo resi nejakym bookmarkletem, kdyz to odesle, pekne mu podekujeme a pogratulujeme, nicmene do statistik zapocteme jenom ty, kterym lusteni trvalo nejakou minimalni dobu.

elfineer - středa 20. září 2006, 17:07 - web - #

Diky, to je hodne chytrej napad :)… To zkusim a napisu, jak to jde, jeste jednou dik.

Nejgenialnejsi reseni byvaji ty nejjednodussi…

Komentáře používají Texy! syntaxi.

"odkaz":http://kam.vede.cz, *zdůrazněné (em)*, **zdůrazněnější (strong)**, citace


Hledání

Mikroblog

GOTO TWITTER

Reklama

Nejčtenější

Reklama

Kvalitní domény, levný webhosting
Vyzkoušejte spolehlivý Český hosting. www.cesky-hosting.cz

Facebook tipy

Moje weby

Napište mi vzkaz


TOPlist