Pagrindiniai web sistemų pažeidžiamumai Ir saugos būdai


10. Nepatikrinti peradresavimai

 

Paskutinis OWASP „Top 10“ išskiriamas pažeidžiamumas taikomas Web aplikacijoms, kurios prieš peradresuodamos savo vartotojus laisvai leidžia manipuliuoti paskirties adresu. Įsilaužėliai, naudodamiesi šiomis spragomis, gali suklaidinti vartotojus su jiems iš pažiūros neįtartinomis nuorodomis, pvz:

http://www.trusted.com/redirect.jsp?url=untrusted.tk

Vartotojas iš patikimo puslapio trusted.com gali būti nukreipiamas į kenkėjiškos programinės įrangos šaltinius ar identiškai atrodantį puslapį „sukčiautoją“, kad būtų išgaunami konfidencialūs prisijungimo duomenys. Šis pažeidžiamumas, dar vadinamas atviru peradresavimu, yra dažnai aptinkamas kuomet Web aplikacijai prireikia registruoti išorinius peradresavimus. Pažeidžiamo kodo pavyzdys[19]:

var url = Request.QueryString['url'];
LogRedirect(url);
Response.Redirect(url);

Apsaugant šį kodą siūloma naudoti baltuosius paskirties adresų sarašus. Kodo, tikrinančio ar paskirties adresas yra duomenų bazėje esančiame baltame saraše, pavyzdys:

var db = new MyTrustedSiteEntities();
if (!db.AllowableUrls.Where(u => u.Url == url).Any())
{
// Exit with a warning message
}

Aukštesnio lygio saugumui ir izoliacijai užtikrinti tokiose situacijose galėtų būti įgyvendinami netiesioginiai peradresavimai, naudojant nuorodų žemėlapius. Tokia „apsaugota“ nuoroda gali atrodyti taip:

http://www.trusted.com/redirect.jsp?id=A5600-DH356-32234JHA-564FDAE

Serverio pusės kodas, apdorodamas šį nuorodos identifikatorių, sėkmingai grąžintų atitinkamą peradresavimo atsakymą, nukreipiantį vartotojo naršyklę į patikimą adresą.