Политика истог извора

С Википедије, слободне енциклопедије

У рачунарству, политика истог извора (енгл. same-origin policy) је битан концепт у сигурносном моделу веб-апликације. Она дозвољава скриптама које раде на страницама пореклом са истог сајта – комбинација схеме (енгл. URI scheme), хостнаме-а и рачунарског порта (енгл. Port (computer networking))[1] – да приступе међусобном објектном моделу докумената (ДОМ) без посебних ограничења, али спречава приступ ДОМу других сајтова.[1] Политика истог извора се такође примењује на XМЛХттпРеqуест-ове осим у случају да сервер пружа Аццесс-Цонтрол-Аллоw-Оригин (ЦОРС) заглавље. WебСоцкет-и нарочито нису подлежни овом концепту.

Механизам носи посебни значај за модерне wеб-апликације које веома зависе од ХТТП колачића (енгл. cookie) да би одржали корисничке сесије, зато што се сервери понашају у зависности од информације ХТТП колачића како би открили осетљиве информације или како би променили стање. Стриктна раздвојеност од садржаја који снабдева неповезани сајт мора бити одржана од стране клијента како би се избегао губитак поверљивости и интегритета података.

Историја[уреди | уреди извор]

Концепт политике истог извора датира од веб-прегледача Нетсцапе Навигатор 2 из 1995. године. Сви модерни прегледачи користе неку форму порекло-полисе јер је то камен темељац безбедности прегледача[2]. Полисе не морају да се поклапају са неком прецизном спецификацијом[3] али се често користе како би дефинисали угрубо компатибилне безбедносне границе за друге скриптне језике као што су Адобе Фласх или Адобе Ацробат, или за механизме невезане за директну ДОМ манипулацију, као на пример XМЛХттпРеqуест.

Правила одређивања порекла[уреди | уреди извор]

Алгоритам који се користи да израчуна „порекло” УРИ-а је прецизирано у РФЦ 6454, четврти одељак. За апсолутне УРИ-је, порекло је троделно (протокол, хост, порт). Ако УРИ не користи хијерархијски елемент као називни ауторитет (видети РФЦ 3986, одељак 3.2) или ако УРИ није апсолутни УРИ, онда се користи глобално јединствен идентификатор. За два ресурса се сматра да су истог порекла само ако су њихове вредности потпуно једнаке.

Илустрације ради, наредна табела нам даје преглед типичних исхода користеци УРЛ "http://www.example.com/dir/page.html[мртва веза]".

УРЛ са којим се упоређује Исход Разлог
http://www.example.com/дир/паге2.хтмл Суццесс Саме протоцол анд хост
http://www.example.com/дир2/отхер.хтмл Суццесс Исти протокол и хост
хттп://усернаме:пассwорд@www.example.com/дир2/отхер.хтмл Суццесс Саме протоцол анд хост
http://www.example.com:81/дир/отхер.хтмл Фаилуре Саме протоцол анд хост бут дифферент порт
хттпс://www.еxампле.цом/дир/отхер.хтмл[мртва веза] Фаилуре Дифферент протоцол
хттп://ен.еxампле.цом/дир/отхер.хтмл Фаилуре Дифферент хост
хттп://еxампле.цом/дир/отхер.хтмл Фаилуре Дифферент хост (еxацт матцх реqуиред)
хттп://в2.www.еxампле.цом/дир/отхер.хтмл Фаилуре Дифферент хост (еxацт матцх реqуиред)
http://www.example.com:80/дир/отхер.хтмл Деппендс Порт еxплицит. Депендс он имплементатион ин броwсер.

За разлику од других прегледача, Интернет Еxплорер не укључује порт у рачунању порекла, он користи Сецуритy Зоне уместо тога[4] .

Опуштање политике истог извора[уреди | уреди извор]

У неким околностима политика истог извора је превише рестриктивна, па представља проблем за велике wеб-сајтове који користе више поддомена. Ево четири начина да се полиса опусти :

доцумент.домаин одлике[уреди | уреди извор]

Ако два прозора (или фрејма) садрже скрипту која поставља домен на исту вредност, политика истог извора је опуштена за ова два прозора, и они могу међусобно дејствовати. На пример, сарађујући скрипти у документима очитаним из ордерс.еxампле.цом и цаталог.еxампле.цом могу поставити да њихов доцумент.домаин буде „еxампле.цом”, и тако би документи изгледали као да су исто порекла и дозволили би сваком документу да прочита одлике овог другог. Ово можда неће сваки пут радити, јер би порт склоњен у интерну репрезентацију могао да буде ознацен са нулл. Другим речима, еxампле.цом порт 80 ће постати еxампле.цом порт нулл зато што се доцумент.домаин упдате-ује. Порт нулл се не може третирати као 80 (у зависности од коришћеног прегледача) и зато може да пропадне или успе у зависност од прегледача.[5]

Цросс-Оригин дељење ресурса[уреди | уреди извор]

Друга техника за опуштање постаје стандардизована као Цросс-Оригина дељење ресурса (Цросс-Оригин ресоурце схаринг). Он продужава ХТТП са новим Оригин реqуест заглављем и новим ЦОРС узајамним заглављем. То дозвољава серверима да користи заглавља да експлицитно наводи порекла која могу да траже фајл или да искористе „wилдцард” и дозволе фајлу да буде тражен од стране било ког сајта. Прегледачи као што је Фирефоx 3.5 и Сафари 4 користе ово ново заглавље да дозволе цросс-оригин ХТТП захтеве са XМЛХттпРеqуест-ом који би иначе били забрањени политиком истог извора.[6]

Цросс-доцумент мессагинг[уреди | уреди извор]

Још једна нова техника, цросс-доцумент мессагинг дозвољава скрипту са једне стране да прослеђује текстуалне поруке скрипти на другој страници независно од порекла скрипта. Цаллинг тхе постМессаге() метход он а Wиндоw објецт асyнцхроноуслy фирес ан "онмессаге" евент ин тхат wиндоw, триггеринг анy усер-дефинед евент хандлерс. Скрипт на једној страни и даље не може директно приступити методама или варијаблама на другој страни, али они могу комуницирати без опасности користећи ову методу.

ЈСОНП[уреди | уреди извор]

ЈСОНП дозвољава страници да прими ЈСОН податке са различитог домена тако што дода <сцрипт> елемент страници која очитава ЈСОН одговор са другог домена.

Цорнер случајеви и изузеци[уреди | уреди извор]

Понашање провера и сличних механизама политике истог извора није добро дефинисана у неколико цорнер случајева као на пример за псеудо-протоколе који немају јасно дефинисано хост име или порт повезан са својим УРЛом (филе:, дата:, итд.). Ово је стварало поприличан број сигурносних проблема, као што су генерално непожељна могућност сваког локално сачуваног ХТМЛ фајла да приступи свим другим фајловима на диску, или да комуницира са било којим сајтом на интернету. Такође, многе цросс-домаин операције које су биле пре ЈаваСцрипт-а нису подлежне провери политике истог извора. Један такав пример је могућност укључивања скрипта преко домена. На крају, одређени типови напада, као што је ДНС ребиндинг или серверски проксији, дозвољавају да се провера хост наме-а обори, и омогућавају одбеглим веб страницама интеракцију са сајтовима кроз адресе које нису њиховог правог порекла. Ови напади су опасност само у посебним ситуацијама, зато што прегледач и даље верује да интеракцију врши са нападачким сајтом, и зато не дели колачиће трећих лица или друге осетљиве податке нападачу.

Ублажавања[уреди | уреди извор]

Да би омогуцили пројектанту да заобиђе политику истог извора, неколико „хакова”, као што је на пример идентификатор фрагмената или window.name одлика су коришћени за прослеђивање података између докумената који су у различитим доменима. Са ХТМЛ5 стандардом, метода је формализована за ово : postMessage интерфејс,[7][8] који се једино налази на новијим прегледачима.[9] ЈСОНП такође може да се искористи како би омогућио позиве сличне Ајаx-у другим доменима.[10]

Референце[уреди | уреди извор]

Спољашње везе[уреди | уреди извор]