Podivná chyba OpenID

Před časem se mi na mém webu, který podporuje OpenID, začala objevovat podivná chyba "Bad signature". Web používá standardní PHP OpenID knihovnu od JanRain. Nakonec jsem příčinu odhalil...

Když se chyba objevila, začal jsem hledat. Všechny stopy, co jsem vyGooglil, vedly k matematickým knihovnám v PHP – popisováno jako "miscompiled GMP library". Zkoušel jsem všechny triky, co kdo kde popisoval, ale nepomohlo nic. Navíc se tahle chyba objevovala jen s některými identitami od některých providerů. Bohužel i s mým primárním MyOpenID. Například ClaimID ale touto chybou netrpěl.

Nakonec jsem usoudil, že jde pravděpodobně o nějakou chybu u MyOpenID, se kterou nic nenadělám, a nechal jsem to plavat.

Dnes jsem zkusil Seznamský OpenID, a výsledek byl stejný. Inu, asi používají stejnou knihovnu... Zkoušel jsem to ve standardním "consumer example", který je dodáván ke knihovně. Výsledek stále týž: Bad signature.

Nakonec jsem, už nevím z jakého důvodu, zkusil totéž v IE7. Vše fungovalo bez problémů. Vyzkoušel jsem ještě pár identit, co mi ve FF nešly – v IE v pohodě! Zkusil jsem s Operou – zase v pořádku. Podezření tedy padlo na Firefox. Něco musí někde nějak posílat jinak...

Chvíli jsem si hrál s Fiddlerem, chytal jsem požadavky a porovnával je, a při té příležitosti jsem zahlédl, že si MyOpenID interně přesměrovává uživatele (i) pomocí HTML stránky, kde je JavaScript na přechod na jinou stránku a META REFRESH tag. Ha! Ve Firefoxu mám NoScript plugin, další pátrání jsem tedy vedl tímhle směrem.

Zkusil jsem povolit JS pro doménu myopenid.com (lépe řečeno potlačit NoScript pro danou doménu) – vše začalo fungovat. Zakázal jsem, a opět Bad Signature. Jako pravděpodobnou příčinu jsem tedy vyhodnotil "cosi" v interním přesměrovávání na MyOpenID, kde se kvůli NoScript něco předalo nikoli přes script, ale přes refresh, a špatně.

Ale pořád se mi zdálo, že to tím tak úplně nebude. Navíc, jakmile jsem pustil provoz přes Fiddlerovskou proxy, tak se mi objevilo ve FF hlášení o "podezření na XSS útok" a podobné hlášení (o neshodě domén) přišlo i z Fiddleru.Začal jsem tím, co hlásil Fiddler, to vypadalo jednodušeji.

Fiddler totiž hlásil, že v požadavku v HOST je moje.domena.com, ale v Location je moje.domena.com:80. Ano, vím že ten standardní ukázkový "consumer" posílá jako TrustedDomain i ReturnTo cestu s portem (:port). Že by byl problém v tomhle?

Zkusil jsem  upravit patřičné funkce v /examples/consumer/common.php a vyhodit z nich tu ":port" část. Všechno začalo fungovat tak jak to fungovat má.

Dál jsem nepátral, ale předpokládám, že tentýž nesoulad ("domain.com" vs "domain.com:80") zjistí i XSS filtr v NoScript a nějak se začne vrtat do hlaviček. A to OpenID knihovna zjevně nese nelibě.

Resumé: Pokud zjistíte podivné chyby při přihlašování pomocí OpenID, tak si zakažte NoScript pro doménu svého OpenID providera. A pokud na svém serveru používáte OpenID knihovnu od JanRain a uživatelé vám hlásí problémy, zkuste vyhodit ":port" část z ReturnTo a TrustedPath řetězců.

(English)

Dne 11.12.2008

Twittni

Přidej do: asdf.sk StumbleUpon Toolbar Stumble It!

Komentáře

[1] (Daniel Dočekal - WWW) 11.12.2008, 22:58:47 [X] [D]
Nojo, nemáš používat obskurní blokátory ....

[2] (Arthur Dent [openID] - Mail - WWW) 11.12.2008, 23:06:36 [X] [D]
[1] Čekal jsem na nějakého takového chytrolína, a dneska jsi to byl zrovna ty! Gratuluju! :)

[3] (ehmo - Mail - WWW) 11.12.2008, 23:08:08 [X] [D]
Daniel to je dobra kravina. Pouzivanie NoScriptu je velmo dolezite ako ochrana proti XSS, clickjacking a pod. Ak poznas inu ochranu, sem s nou. To ze sa stanu aj podobne pripady je jasne. Obcas sa objavi aj FP ale vzdy lepsie, ako prist napriklad o peniaze na ucte len kvoli tomu, ze nebudes pouzivaat patricnu ochranu.

[4] (petr.stanicek@seznam.cz[[openidhttp://id.seznam.cz/5520d112d307e [openID] ) 12.12.2008, 13:45:36 [X] [D]
A vážně to seznamácké OpenID funguje?

[5] (petr.stanicek@seznam.cz[[openidhttp://id.seznam.cz/5520d112d307e [openID] ) 12.12.2008, 13:47:03 [X] [D]
aha - "nějak" ano.

[6] (Arthur Dent [openID] - Mail - WWW) 12.12.2008, 14:13:46 [X] [D]
[4][5] To bude spíš něco v implementaci na Bloguje, přepošlu admince.

[7] (hekko@seznam.cz [openID] - WWW) 12.12.2008, 14:54:24 [X] [D]
Už by to mohlo fungovat i líp než nějak.