A Facebook Like gombjának egy csomó előnye van. Az egyik például az, hogy mivel előbb-utóbb ott lesz minden weboldalon, ha esetleg valamilyen security bug van benne, akkor az szinte a teljes internetet érinteni fogja. Mint ahogyan érinti is.
Lássuk csak, hogyan készül egy Like button!
Kezdetben vala a gombra vágyó felhasználó (szándékosan nem fejlesztőt írtam), aki elvándorol a Facebook ide vonatkozó oldalára és varázsol magának egy iframe darabkát, amit beilleszt az oldalába. Ezzel még nincs is gond. A probléma ott jön elő, amikor emberünk rájön, hogy “de jó lenne ez a gomb az összes oldalamra!”, és elkezdi anatómiailag elemezni a bemásolt kódrészletet, például:
<iframe src="http://www.facebook.com/plugins/like.php?
href=http%253A%252F%252Fbalassy.spaces.live.com
&layout=standard
&show_faces=false
&width=450
&action=like
&font
&colorscheme=light
&height=35"
scrolling="no" frameborder="0"
style="border:none; overflow:hidden; width:350px; height:22px;"
allowTransparency="true">
</iframe>
Nem kell atomfizikusnak lennie, hogy rájöjjön, a href után az aktuális oldal URL-jét kell bemásolni. Hogy is szoktuk azt csinálni? “Hát ASP.NET-ben például azt írjuk oda, hogy <%= this.Request.Url %>, Javascriptben meg azt, hogy document.URL, és biztos PHP-ben is van hasonló.” Az sem gond, ha elsőre nem működik, hiszen a Google mindenre tudja a választ, hamar lehet működő kódrészletet vagy plugint találni. Nem is kell hozzá programozónak lenni, elég hozzá olvasni és kopipésztelni tudni.
Mivel főhősünk nem programozó, észre sem fogja venni, hogy a neten terjedő kódrészletek igen jelentős hányada ész nélkül másolja be a kapott URL-t a weboldal forráskódjába. Tipikus cross-site scripting melegágy, nem is kell hozzá atomfizikusnak lenni, hogy találjunk egy olyan inputot, ami kihasználja, például:
http://example.com/oldal.kiterjesztes?" onload="javascript:alert('XSS')" nincsilyen="
Nyilván környezettől és böngészőtől függ, hogy pontosan hogyan és meddig lehet eljutni, de a lényeg, hogy sebesen terjednek a kihasználható kódrészletek, ráadásul szerencsétlen felhasználók észre sem veszik, ha ilyen oldalba futnak.
Még az is lehet, hogy meglájkolják.