国产精品香蕉在线观看网,亚洲欧美精品综合在线观看,亚洲不卡av一区二区无码不卡,亚洲日本精品国产第一区二区

移動(dòng)安全 安全管理 應(yīng)用案例 網(wǎng)絡(luò)威脅系統(tǒng)安全 應(yīng)用安全 數(shù)據(jù)安全 云安全
當(dāng)前位置: 主頁(yè) > 信息安全 > 系統(tǒng)安全 >

跨域資本共享(CORS)安然性淺析

時(shí)間:2013-11-29 18:51來源:TuZhiJiaMi企業(yè)信息安全專家 點(diǎn)擊:
1、布景 提起瀏覽器的同源策略,大年夜家都很熟諳。不合域的客戶端腳本不克不及讀寫對(duì)方的資本。可是實(shí)踐中有一些場(chǎng)景需要跨域的讀寫,所以呈現(xiàn)了一些hack的編制來跨域。好比在同域內(nèi)
Tags系統(tǒng)安全(735)瀏覽器(56)CORS(1)  

  1、布景

  提起瀏覽器的同源策略,大年夜家都很熟諳。不合域的客戶端腳本不克不及讀寫對(duì)方的資本??墒菍?shí)踐中有一些場(chǎng)景需要跨域的讀寫,所以呈現(xiàn)了一些hack的編制來跨域。好比在同域內(nèi)做一個(gè)代辦署理,JSON-P等。但這些編制都存在缺點(diǎn),沒法完美的實(shí)現(xiàn)跨域讀寫。所以在XMLHttpRequest v2尺度下,提出了CORS(Cross Origin Resourse-Sharing)的模型,試圖供給安然便利的跨域讀寫資本。今朝主流瀏覽器均撐持CORS。

  2、手藝道理

  CORS定義了兩種跨域要求,簡(jiǎn)單跨域要乞降非簡(jiǎn)單跨域要求。當(dāng)一個(gè)跨域要求發(fā)送簡(jiǎn)單跨域要求包含:要求編制為HEAD,GET,POST;要求頭只有4個(gè)字段,Accept,Accept-Language,Content-Language,Last-Event-ID;假定設(shè)置了Content-Type,則其值只能是application/x-www-form-urlencoded,multipart/form-data,text/plain。說起來比較別扭,簡(jiǎn)單的意思就是設(shè)置了一個(gè)白名單,合適這個(gè)前提的才是簡(jiǎn)單要求。其他不合適的都長(zhǎng)短簡(jiǎn)單要求。

跨域資本共享(CORS)安然性淺析

  之所以有這個(gè)分類是因?yàn)闉g覽器對(duì)簡(jiǎn)單要乞降非簡(jiǎn)單要求的措置機(jī)制是不一樣的。當(dāng)我們需要發(fā)送一個(gè)跨域要求的時(shí)辰,瀏覽器會(huì)起首查抄這個(gè)要求,假定它合適上面所述的簡(jiǎn)單跨域要求,瀏覽器就會(huì)當(dāng)即發(fā)送這個(gè)要求。假定瀏覽器查抄以后發(fā)現(xiàn)這是一個(gè)非簡(jiǎn)單要求,好比要求頭含有X-Forwarded-For字段。這時(shí)候辰瀏覽器不會(huì)頓時(shí)發(fā)送這個(gè)要求,而是有一個(gè)preflight,跟辦事器驗(yàn)證的過程。瀏覽器先發(fā)送一個(gè)options編制的預(yù)檢要求。下圖是一個(gè)示例。假定預(yù)檢經(jīng)由過程,則發(fā)送這個(gè)要求,不然就不拒盡發(fā)送這個(gè)跨域要求。

跨域資本共享(CORS)安然性淺析

  下面具體闡發(fā)一下實(shí)現(xiàn)安然跨域要求的節(jié)制編制。先看一下非簡(jiǎn)單要求的預(yù)檢過程。瀏覽器先發(fā)送一個(gè)options編制的要求。帶有以下字段:

  Origin: 通俗的HTTP要求也會(huì)帶有,在CORS中專門作為Origin信息供后端比對(duì),表白來歷域。

  Access-Control-Request-Method: 接下來要求的編制,例如PUT, DELETE等等

  Access-Control-Request-Headers: 自定義的頭部,所有效setRequestHeader編制設(shè)置的頭部都將會(huì)以逗號(hào)隔開的情勢(shì)包含在這個(gè)頭中

  然后假定辦事器建設(shè)了cors,會(huì)返回對(duì)應(yīng)對(duì)的字段,具體字段含義在返回成果是一并詮釋。

  Access-Control-Allow-Origin:

  Access-Control-Allow-Methods:

  Access-Control-Allow-Headers:

  然后瀏覽器再按照辦事器的返回值鑒定是不是發(fā)送非簡(jiǎn)單要求。簡(jiǎn)單要求前面講過是直接發(fā)送,只是多加一個(gè)origin字段表白跨域要求的來歷。然后辦事器措置完要求以后,會(huì)再返回成果中加上以下節(jié)制字段:

  Access-Control-Allow-Origin: 承諾跨域拜候的域,可所以一個(gè)域的列表,也能夠是通配符"*"。這里要寄望Origin法則只對(duì)域名有效,其實(shí)不會(huì)對(duì)子目次有效。即http://foo.example/subdir/ 是無效的??墒遣缓献佑蛎枰指粼O(shè)置,這里的法則可以參照同源策略

  Access-Control-Allow-Credentials: 是不是承諾要求帶有驗(yàn)證信息,這部門將會(huì)鄙人面具體詮釋

  Access-Control-Expose-Headers: 承諾腳本拜候的返回頭,要求成功后,腳本可以在XMLHttpRequest中拜候這些頭的信息(貌似webkit沒有實(shí)現(xiàn)這個(gè))

  Access-Control-Max-Age: 緩存此次要求的秒數(shù)。在這個(gè)時(shí)候范圍內(nèi),所有同類型的要求都將不再發(fā)送預(yù)檢要求而是直接利用此次返回的頭作為鑒定根據(jù),很是有效,大年夜幅優(yōu)化要求次數(shù)

  Access-Control-Allow-Methods: 承諾利用的要求編制,以逗號(hào)隔開

  Access-Control-Allow-Headers: 承諾自定義的頭部,以逗號(hào)隔開,大年夜小寫不敏感

  然后瀏覽器經(jīng)由過程返回成果的這些節(jié)制字段來決定是將成果開放給客戶端腳本讀取仍是樊籬掉落。假定辦事器沒有建設(shè)cors,返回成果沒有節(jié)制字段,瀏覽器會(huì)樊籬腳本對(duì)返回信息的讀取。

  3、安然隱患

  大年夜家寄望這個(gè)流程。辦事器領(lǐng)遭到跨域要求的時(shí)辰,并沒有先驗(yàn)證,而是先措置了要求。所以從某種程度上來講。在撐持cors的瀏覽器上實(shí)現(xiàn)跨域的寫資本,打破了傳統(tǒng)同源策略下不克不及跨域讀寫資本。

  再一個(gè)就是假定法度猿偷懶將Access-Control-Allow-Origin設(shè)置為承諾來自所有域的跨域要求。那么cors的安然機(jī)制幾近就無效了。不外先別興奮的太早。其實(shí)這里在設(shè)計(jì)的時(shí)辰有一個(gè)很好的限制。xmlhttprequest發(fā)送的要求需要利用“withCredentials”來帶上cookie,假定一個(gè)方針域設(shè)置成了承諾肆意域的跨域要求,這個(gè)要求又帶著cookie的話,這個(gè)要求是不合法的。(就是假定需要實(shí)現(xiàn)帶cookie的跨域要求,需要明白的建設(shè)承諾來歷的域,利用肆意域的建設(shè)是不合法的)瀏覽器會(huì)樊籬掉落返回的成果。javascript就沒法獲得返回的數(shù)據(jù)了。這是cors模型最后一道防地。假定沒有這個(gè)限制的話,那么javascript便可以獲得返回?cái)?shù)據(jù)中的csrf token,和各類敏感數(shù)據(jù)。這個(gè)限制極大年夜的降落了cors的風(fēng)險(xiǎn)。

  4、報(bào)復(fù)打擊模型

跨域資本共享(CORS)安然性淺析

  從思路上講,有兩種類型的報(bào)復(fù)打擊編制。一種是在報(bào)復(fù)打擊者本身節(jié)制的網(wǎng)頁(yè)上嵌進(jìn)跨域要求,用戶拜候鏈接,履行了跨域要求,從而報(bào)復(fù)打擊方針,好比拜候了內(nèi)網(wǎng)敏感資本。還有一種是正常的網(wǎng)頁(yè)被嵌進(jìn)了到報(bào)復(fù)打擊者節(jié)制頁(yè)面的跨域要求,從而劫持用戶的會(huì)話。

  5、報(bào)復(fù)打擊場(chǎng)景

  先看第一種思路的報(bào)復(fù)打擊場(chǎng)景:

  1,復(fù)雜csrf。傳統(tǒng)的csrf都是操縱html標(biāo)簽和表單來發(fā)送要求。沒有編制實(shí)現(xiàn)一些復(fù)雜步調(diào)的csrf,好比摹擬購(gòu)物,先加購(gòu)物車,結(jié)算,填寫信息,等等。好比上傳文件。具體可以參考操縱csrf上傳文件

  2,拜候內(nèi)網(wǎng)敏感資本。這個(gè)在必然的前提下是可以實(shí)現(xiàn)的。好比內(nèi)網(wǎng)的辦事器建設(shè)了

  Access-Control-Allow-Origin: * 承諾任何來自肆意域的跨域要求

  用戶拜候歹意網(wǎng)頁(yè)的時(shí)辰,履行了到內(nèi)網(wǎng)辦事器192.168.1.123/password.txt的要求,腳本在領(lǐng)遭到辦事器返回以后,將內(nèi)容發(fā)送到報(bào)復(fù)打擊者的辦事器上。

  第二種思路的場(chǎng)景:

  1,交互式xss。參考揭密HTML5帶來的報(bào)復(fù)打擊手法中講到的shell of the future東西。經(jīng)由過程cors,繞過一些反會(huì)話劫持的編制,如HTTP-Only限制的cookie,綁定IP地址的會(huì)話ID等,劫持用戶會(huì)話。

  2,法度猿在寫ajax要求的時(shí)辰,對(duì)方針域限制不嚴(yán)。有點(diǎn)近似于url跳轉(zhuǎn)。facebook呈現(xiàn)過如許一個(gè)案例。javascript經(jīng)由過程url里的參數(shù)進(jìn)行ajax要求。經(jīng)由過程節(jié)制這個(gè)參數(shù)實(shí)現(xiàn)注進(jìn)報(bào)復(fù)打擊。

跨域資本共享(CORS)安然性淺析

  稱謝

------分隔線----------------------------

推薦內(nèi)容