Pravdepodobne každý tvorca webu sa v živote stretol s tzv. refererom. Jedná sa o reťazec prenášaný klientským prehliadačom, ktorý výlučne pre benefit navštíveného servera nesie v sebe informáciu o zdroji, z ktorého prišiel. Takto je možné zistiť, odkiaľ k vám prišiel návštevník a ktoré linky majú akú odozvu.
Referer je zakorenený priamo v RFC 2616 v sekcii 14.36 (biblii každého, kto sa zaoberá web security). Ako som už napísal v úvode, referer je reťazec reprezentujúci zdrojový server, z ktorého návštevník prišiel. Takto je možné identifikovať napríklad aj to, aký reťazec návštevník vyhľadal na Google, čo ho priviedlo až k vášmu webu.
Referer je veľmi často využívaný množstvom programátorov pre zvýšenie funkcionality webu. Veľmi často sa využíva napríklad pre návrat/prechod na stránku späť. Je to logická náhrada za JavaScript, ktorý má dnes vypnutých až cez 10% návštevníkov a ďalší zablokovaný kvôli ochrane.
Len málokto si však uvedomuje, že referer môže byť aj strojcom problémov. Na úrovni užívateľa je to samozrejme fakt, že majiteľ webu kam ste práve prišli vie, kde ste boli pred vstupom na jeho web. Nie je na tom nič nebezpečné, maximálne tak nepríjemné, pretože sa na danej stránke nachádzala linka, cez ktorú ste k nemu prešli. Na úrovni servera môže byť problémov hneď niekoľko. Programátori až moc často zabúdajú na to, že aj referer je reťazec, ktorý môže užívateľ veľmi jednoducho zmeniť. Vďaka tomu môže byť práve referer najzraniteľnejším miestom aplikácie. Neraz som sa stretol s webom, ktorý referery ukladal do databázy a nebol ošetrený proti vstupu nebezpečných znakov. Cez túto dieru bol následne vykonaný SQL Injection a web bol kompromitovaný aj napriek tomu, že ostatné vstupy a výstupy boli skutočne veľmi kvalitne ošetrené.
pozn.
V jazyku PHP a databáze MySQL je najvhodnejšie na tento účel využívať mysqli_stmt::prepare, v jazyku Python pre databázu MySQL MySQLdb (execute).
Ďalším veľmi častým prípadom je zlé ošetrenie session. Ak session nie je priradená ku konkrétnemu počítaču (napríklad cez IP adresu) a je prenášaná cez url, môže sa majiteľ navštíveného webu dostať napríklad aj do administrácie systému bez toho, aby poznal prihlasovacie údaje. Samozrejme len za predpokladu, že platnosť session ešte nevypršala.
Nemenej zaujímavým je aj fakt, že cez referer je možné objaviť miesta cudzieho webu, ktoré by ste inak nepoznali. Vďaka refereru napríklad vieme, že Sme má na službe vybrali.sme bonzlist. Taktiež sa môžete dozvedieť o presnej lokácii administrácii, ak vás navštívi administrátor, ktorému sa zobrazí vaša linka medzi odkazujúcimi stránkami. Vďaka tomu napríklad viem, že môj obľúbený sushiblog beží na textpattern. Nie že by to nešlo zistiť inak, ale občas sa stane, že administrácia je umiestnená na neštandardných miestach (namiesto /admin napríklad /cucoriedka). Lokalizovanie takejto administrácie je potom veľmi obtiažne, ak nie nemožné.
U užívateľa som zámerne preskočil jeden veľmi závažný dôvod, prečo si vypnúť referer. V mojom nedávnom článku o zraniteľnosti služby dropbox som publikoval aj video cez službu vimeo, ktorá ako jeden z benefitov umožňuje aj komukoľvek zistiť, odkiaľ užívateľ video navštívil. Medzi mnohými linkami nájdete aj linky v spoločnej sekcii file. Táto sekcia obsahuje referer, ktorým je súbor. Ako je to možné? Pozrite sa sami.
file///C:/Users/botiq/AppData/Roaming/Feedreader/cache/article5895.htmČo je možné z týchto údajov vyčítať je snáď jasné každému. Od mena užívateľa, cez jazyk (lokalizáciu) jeho OS Windows až po názov RSS čítačky, ktorú používa. A tu je celý kameň úrazu. Ak využívate niektorú z externých čítačiek pre RSS feedy a priamo v nej otvárate aj jednotlivé články, výsledok už poznáte.
file///C:/Documents%20and%20Settings/psolty/Local%20Settings/Temp/Newz%20Crawler/fra24E3.html
file///C:/Documents%20and%20Settings/roman/Application%20Data/Feedreader/cache/article7437.htm
file///C:/Documents%20and%20Settings/Marcel%20Kubala/Local%20Settings/Temp/~fdnws024A1735-2504-4537-9EA0-A6A8708C2593.h
file///C:/Users/andrej/AppData/Roaming/Feedreader/cache/article40105.htm
file///C:/Documents%20and%20Settings/milosh.MK.000/Application%20Data/Feedreader/cache/article561.htm
file///C:/Documents%20and%20Settings/peter.IRIS/Application%20Data/Feedreader/cache/article1559.htm
file///C:/Documents%20and%20Settings/klimko/Application%20Data/Feedreader/cache/article11.htm
file///C:/Documents%20and%20Settings/Peto/Data%20aplikac%C4%82%C2%AD/Feedreader/cache/article3936.htm
file///C:/Documents%20and%20Settings/Jakub/Local%20Settings/Temp/~nbtmp0001.html
file///C:/Documents%20and%20Settings/michal.klima/Local%20Settings/Temp/~fdnws215D4170-DCDA-418C-AF00-0815A55CAF0C.html
file///C:/Dokumente%20und%20Einstellungen/Juraj/Lokale%20Einstellungen/Temp/~fdnwsEF787911-6C7B-4D77-814A-AD22AB4F108B.html
Ako ste sami mali možnosť vidieť, referer je veľmi nebezpečná vec a preto by ste ju nemali podceňovať, najlepšie by ste ho však mali úplne zakázať. Pre užívateľov Firefoxu sa naskytá hneď niekoľko možností. Tou najjednoduchšou je v nastaveniach Firefoxu, ktoré vyvoláte po zadaní about:config do URL políčka. Do filtru zadajte buď len referer, alebo network.http.sendRefererHeader a network.http.sendSecureXSiteReferrer a zmeňte true za false, alebo jednotku za nulu. Takto je referer vypnutý na stálo a pre jeho zapnutie a vypnutie je vždy potrebné reštartovať Firefox. Sú však niektoré weby (ako vybrali.sme.sk), ktoré vyžadujú zapnutý referer, inak neumožnia hlasovať. Pre takýto prípad je lepšie mať možnosť referer vždy zapnúť jediným kliknutím. Túto funkciu poskytuje výborný Web Developer s obrovským množstvom ďalších výborných funkcií. Ďalšou možnosťou (hlavne pre pen testerov) je rozšírenie Modify Headers, v ktorom môžete testovať aj rôzne bezpečnostné vektory (napríklad pre XSS).
Pre ostatné prehliadače možnosti nepoznám, snáď ich niekto napíše do komentáru.
Programátorom webu by som odporučil byť zdravo paranoidný a vždy ošetrovať akékoľvek dáta, kľudne aj tie, ktoré ste získali z vlastného interného zdroja. Nikdy neviete, kde sa objaví zraniteľnosť.





pohladal som, hadam to je ono
http://www.opera.com/support/search/view/93/
warior:
operu nepoužívam, malo by to byť ono.
Pre istotu odporúčam nejakú “view my referer” službu, napr. tento odkaz http://www.whatismyreferer.com/ ak je referer vypnutý, prvý riadok by mal byť prázdny, keď budeš mať referer zapnutý, bude tam adresa na tento web.
V Opeře je to jednoduché, je na to tlačítko v Nastavení – Pokročilé volby – Připojení – “Odesílat info o předešlé navštívené adrese”(překlad se liší dle verze Opery). Jen bych doplnil docela důlěžitou věc.
Spousta webů si tak chrání automatické stahování programů (vytížení serveru bych si tipnul) a bez zapnutého Refereru si nic nestáhnete.
Ja som mal vo FF pri hodnote network.http.sendSecureXSiteReferer standartne nastavenu hodnotu 2.
Viete niekto co to ma byt? 0 je false, 1 je true, WTF 2?
asti: nemal si tú dvojku v network.http.sendRefererHeader? (network.http.sendSecureXSiteReferrer je typu boolean, takže tam môžeš mať len true, alebo false)
Referer v administracii webu? V tom pripade urcite nie ako priamy odkaz ;-) Naprogramovat cosi ako http://www.example.org/go?http://www.another-example.org/ by sa snad dalo do kazdeho CMS, nie? :-)
Dokonca mozno aj svojpomocne bez nutnosti cakat na autorov CMSka.
vo firefoxe sa to da vypnut jednoducho network.http.sendRefererHeader sa nastavi na hodnotu 0 a uz to je.
rony: pravda ;) akurat ze tak nefunguje takmer ziadny system, ale co uz :)
lolo: ved je to napisane uz v clanku
network.http.sendSecureXSiteReferrer je s dvomi “r” ( teda aspon u mna – ff 2.0 ) – ked hladate “referer” s jednym r vyhodi to iba network.http.sendRefererHeader a ta je typu cele cislo ( povodna hodnota 2 ).
Len jednu vec – na vypnutie referu je treba zmenit obidve tie polozky ci staci iba network.http.sendRefererHeader?
No co ja viem… referer podla mna nie je tak nebezpecny (z hladiska sukromia uzivatela) ako co je mozne zistit s csskovou pseudotriedou :visited.
Btw. ako je mozne ze to do RFCcka dostalo v bez druheho rka? :)
Menon: mas recht, uz som to zmenil. secure je pre https, normalny je pre http traffic.
addam: pseudotrieda css visited je 10 rokov starada zalestitost, s ktorou sa nikdy nic robit nebude. i cez nu je mozne urobit par neprijemnych veci, ale skor len z titulu, ze dokazes zistit kade clovek chodil (i ked som raz mal prednasku o vyuziti pri phishingu alebo head huntingu). kazdopadne, referer moze byt mnohokrat nebezpecnejsi, pretoze v sebe obcas nesie citlive informacie.
ale ano, mozno urobim clanok aj o tom, este uvidim. chcel by som postupne prejst cely owasp, aby to bolo aj v slovenskom jazyku
Keď sa tu už spomenulo :visited, tak tu je celkom zábavný spôsob využitia tohoto “problému”: http://www.mikeonads.com/2008/07/13/using-your-browser-url-history-estimate-gender/
v opere fici aj “opera:config” a dalej uz popisany postup ako pre ff
gondo: akoze aky popisany postup ako pre FF? prve prispevky hovoria o spravnom postupe pre operu.
Pride mi dost paranoidne vypinat referer v browseri. Chapem, ze je to mozna hrozba, ale hrozba je aj sadnut do auta a soferovat. To teraz vsetci prestanu jazdit na autach aby sa nedajboze nic nestalo?
Kazdopadne moznost jednym clickom povolit/zakazat posielanie refereru, je prijemna :)
Uvedomte si, ze referrer sa da do hlavicky len pri priamom odkaze, takze takto velmi tazko najdete odkaz na administraciu.
BTW ja ho mam tiez vypnuty.
ty si prosim uvedom, ze mnozstvo administracii, vratane systemu wordpress ma priamo v administracii zoznam odkazujucich stranok, teda priamo ich linkov
Zdravím,
možno je táto otázka offtopic ale vzhľadom ku kvalite článkov a komentárov si myslím, že som aj tak na správnom mieste. V otázkach bezpečnosti php programovania som viac menej bažant, preto by som sa vás chcel spýtať či je táto stránka (http://phpsec.org/projects/) dostatočným podkladom k zabezpečeniu webových projektov. Ak náhodou viete o nejakých iných/lepších zdrojoch budem rád ak by ste ich tu zverejnili prípadne mi ich pošlite na mail … avandgar@azet.sk
Ďakujem
To nejsou programatori, ale tupohlavy koderi a script kiddies.
Každý nějak začíná :-D
Zdravim, je to trochu mimo, ale mam jednu otazku. Da sa nejako zistit adresa, alebo nazov domeny, ktora vola script na mojom servery? Napr dam na http://www.test.sk kod, ktory zavola php script na mojom servery. No a ja chcem aby ten script vedel, ze kto ho zavolal, cize aby vedel, ze ho vola http://www.test.sk. Da sa to nejako? Vopred dakujem
#21 sedkooo: nuz na urovni browseru si samozrejme prechod uzivatela mozes overit cez referer. na urovni serveru to zalezi od jazyka a daemona, ale dolezita otazka je hlavne: “k comu to potrebujes”. od toho uz potom zalezi konkretne riesenie
no predstav si, ze na mojej stranke mam napr. odchody autobusov a vlakov. A ked s niekym spravim dohodu tak mu dam kod, ktory si vlozi u seba na web cez iframe. Ale chcem to mat osetrene aby sa to nedalo len tak dalej rozsirovat. Cize ten kod ktory niekomu poskytnem bude platny iba na jeho web stranke a na inej nebude fungovat. Cize to musi byt nejako osetrene na mojom serveri, aby vedel, ze z akej adresy je volany script. Pretoze ak bude tato kontrola na strane klienta, da sa lahko obist. Vysvetlil som to zrozumitelne? A dakujem velmi pekne za odpoved:)
#23 sedkooo: kazda ochrana sa da viac menej obist. na to co chces ty ti staci kontrolovat referer, ak to skutocne musi byt iba na konkretnu adresu, tak to potom musis limitovat na ip danej masiny a to si na serveri overovat. neviem v akom jazyku to mas, ale pozri sa do dokumentacie k nemu, tam najdes vsetko potrebne
Ale mne vobec nejde o to ci niekto klikne na odkazy v tom iframe, ale o to, ze ak si ten iframe da niekto iny na svoj web tak mu nebude fungovat. Neda sa nejako zistit na akej web stranke, je umiestneny ten moj iframe ked zavola skript na mojom serveri? Aby som tomu spravne rozumel, ked je takto na webe iframe a nikto na neho neklikne aj tak sa musi nacitat jeho obsah, cize server na ktorom je umiestnena stranka s iframe sa musi spojit s mojim serverom. Rozumiem tomu spravne? Ak ano tak potom by to malo nejako ist zistit meno servera, ktory sa pripojil na skript u mna. Chcem to robit cez PHP alebo Javascript. Urcite to musi ist nejako osetrit, lebo inak by sa dali dost lahko zneuzivat reklamne odkazy na strankach, ktore zarabuju kliknutim na ne.
#25 sedkooo: vidim, ze velku znalost o prehliadacoch nemas. referer sa neodosiela pri kliknuti (to len na odkaz), ale samozrejme aj pri iframe, frame, object-e, atd. jednoducho vsade tam, kde sa zavola cudzi server. neviem o ake zneuzitie ide, neviem co robis (popravde ani nechcem). na taketo veci vyuzi prosim forum http://diskuse.jakpsatweb.cz/, alebo http://forum.builder.cz, kde ti daju lepsie odpovede ako ja
ide mi iba o to aby si niekto mohol umiestnit na jeho stranku informacie odo mna, napr odchody autobusov, ale nechcem aby si to mohol davat na stranku len tak hocikto, kto si okopiruje source kod, bez toho aby sa so mnou dohodol. ale skusim tie stranky co si mi poradil. Dakujem velmi pekne