Blog archive 2011/02

Ověřené systémy k volnému využití

Feb|28 2011

wiki (různé verze)

Trac

phpbb

...?




Jak na "remember me" funkci u přihlašování

Feb|20 2011

Pojďme se dnes podívat, jakým způsobem implementovat uživateli oblíbenou funkci "zapamatuj si mé přihlášení", anglicky většinou "remember me".

Nemusím asi zdůrazňovat, že chybná implementace takové funkčnosti může mít nedozírné následky. A protože nechceme znovu vymýšlet kolo, podíváme se na osvědčený způsob, který při správné implementaci nesníží bezpečnost autentizace, která je jedním z kritických faktorů bezpečnosti systému.

Základem bude pochopitelně cookie v prohlížeči, který se bude poprvé generovat při úspěšném přihlášení klasickou metodou (zadání uživatelského jména a hesla). Bude obsahovat pouze uživatelské jméno a token (náhodný hash o dostatečné délce, což je dnes 128bitů - tedy sha1 na velmi náhodné číslo by mělo stačit).

Aplikace si na druhé straně tuto tabulku dvojic uživatelské jméno-hash uchovává. Při příchodu neautentizovaného uživatele jeho prohlížeč zašle místo přihlašovacích údajů uloženou cookie užitelské jméno-hash. Pokud je zaslána cookie, která se v tabulce nachází, autentizace proběhla v pořádku a je obratem vygenerována nová dvojice, přičemž předchozí je invalidována. Tím se zamezí opětovnému použití dvojice útočníkem pomocí útoku typu reply. Dvojice jsou navíc invalidovány i po uplynutí rozumného času, například 8mi týdnů.

Dále si musíme uvědomit, co se stane, když se k takové databázi dostane útočník. Teoreticky by měl přístup ke všem účtům, u kterých uživatel kdykoliv v minulosti použil funkci "remember me", což samozřejmě nesmíme připustit. Stejně jako hesla musíme proto tokeny prohnat ještě jednou hashovací funkcí, potom zneužití údajů nehrozí ani při získání celé databáze.

Zdroje:

http://stackoverflow.com/questions/244882/what-is-the-best-way-to-implement-remember-me-for-a-website

http://jaspan.com/improved_persistent_login_cookie_best_practice

http://fishbowl.pastiche.org/2004/01/19/persistent_login_cookie_best_practice/

Tags: Programování | Prohlížeče | Sítě | Bezpečnost | Vývoj



Sémantický web v podání Googlu

Feb|19 2011

Budoucnost internetu se v blízké době bude s velkou pravděpodobností točit kolem sémantického webu. Pojďme se podívat na technologie nabízené Googlem, který bude bezesporu i v dalších letech jedním z leadrů nejen v této oblasti.

Základním problémem sémantického webu je problém značkování. Klasické HTML i XHTML, z nichž druhý jmenovaný se pro automatické zpracování hodí lépe kvůli striktnímu XML formátu, se sémantickým popisem dat nepočítaly. Na druhou stranu nelze z ničeho nic začít používat jiné formáty pro prezentaci dat (např. RDF).

Jedním konkrétním případem, kde se sémantický web začíná uplatňovat v praxi už dnes, jsou stránky on-line obchodů, tedy nabídka zboží. Pokud dnes přijde robot na stránku s popisem zboží, jen velmi obtížně najde relevantní informace, které by mohly být spolehlivé natolik, aby je mohl smysluplně využít. V praxi se proto od portálů žádá speciální rozhraní (většinou ve vormátu XML), kde je možno zjistit přesné informace o produktu.

Nevýhodou speciálních XML feedů je, že každý obchod si tvar XML dokumentu určuje sám, tzn. portláy musí mít tento výpis produktů v mnoha verzích, což je s přibývajícími agregátory stále pracnější. Ideální by bylo, kdyby každý parser uměl vytáhnout všechna data přímo ze stránky, která slouží primárně uživatelům. A k tomu nám idálně poslouží právě sémantický web.

Google pro službu Product Search vyvinul definice jednotlivých metadat, jako je název produktu, kategorie nebo popis. Metadata jsou rozdělena na informace o produktu, o nabídce (cena, prodejce, stav zboží) a o souhrnné nabídce (pokud produkt obsahuje několik variant). Co s těmito údaji Google udělá, je jasné. Co není jasné, jak jednotlivé části webu (tedy HMTL elementy) správně označit dannými metadaty.

Konkrétně Google nabízí hned několik možností. První možností je využít microdata, které jsou součástí HTML 5 a elementům přidají nové atributy itemscope, itemtype a itemprop.

Další možností jsou microformáty, které pro klasifikaci dat používají standardního atributu class, primárně sloužícího pro formátování pomocí CSS. Poslední možností je použití RDFa, tedy rozšíření HTML pomocí jmenných prostorů.  Všechny jsou k vidění na následující ukázce:

<!-- microdata -->
<div itemscope itemtype="http://data-vocabulary.org/Person">
Jmenuji se
<span itemprop="name">Bob Smith</span>
a moje stránky jsou na
<a href="http://www.example.com" rel="nofollow" itemprop="url">www.example.com</a>.
</div>

<!-- microformat -->
<div class="vcard">
Jmenuji se
<strong class="fn">Bob Smith</strong>
a moje stránky jsou na
<a href="http://www.example.com" rel="nofollow" class="url">www.example.com</a>.
</div>

<!-- RDFa -->
<div xmlns:v="http://rdf.data-vocabulary.org/#" typeof="v:Person">
Jmenuji se
<span property="v:name">Bob Smith</span>
a moje stránky jsou na
<a href="http://www.example.com" rel="nofollow" rel="v:url">www.example.com</a>.
</div>

Nyní tedy máme techniky, jak dát robotům možnost získat správná data bez nutnosti definovat XML feed. V českých končinách sice zatím služba nasazena není, ale není špatné vidět do budoucnosti. Z Německa, kde již sémantickým značkám Google rozumí, totiž není daleko.

Tags: Internet | Programování | Google | Facebook | Vývoj



Test rychlosti konkatenace textu v šablonách v PHP

Feb|14 2011

Šablonovací systém v PHP často funguje na tom principu, že si uchovává dočasný výstup v HTML a ten posléze vytiskne. Někde jsem se dočetl, že postupné připojování krátkých sekvencí k existujícímu textu je neefektivní vůči paměti a výkonu, zejména kvůli neustálé realokaci místa. Rozhodl jsem se otestovat, jestli je toto tvrzení založeno na pravdivé skutečnosti.

Vytvořil jsem jednoduchý skript, který pomocí pseudonáhodného generátoru a hashovací funkce md5 sestavoval náhodný text z různě dlouhých kousků textu. V prním případě jsem použil klasickou konkatenaci pomocí tečky, v druhém případě jsem jednotlivé části uchovával v poli a ten nakonec spojil funkcí implode.

Při spouštění skriptu jsem měřil čas spotřebovaný procesorem a celkovou paměť, jakou program potřeboval. Výsledky skutečně hovořily lépe pro verzi s polem a následným spojením pomocí implode funkce, ale rozdíly byly v řádu jednotek procent, maximálně 10%.

Znamená to asi tolik, že optimalizátor i interpret php je obdivuhodně výkonný a k žádnému rapidnímu plýtvání pamětí při postupném tvoření řetězce konkatenací nedochází.

Tags: PHP | Programování | Vývoj