走進前端開發系列二

<img class="lazy" src="//p2.ttnews.xyz/loading.gif" data-original="http://p3.pstatp.com/large/pgc-image/1530515425479be827b6b6b" img_width="1" img_height="1" style="height:1px" alt="走進前端開發系列二" inline="0"><p class="pgc-img-caption"></p></div><div class="pgc-img"><img class="lazy" src="//p2.ttnews.xyz/loading.gif" data-original="http://p99.pstatp.com/large/pgc-image/153051542550021964c10d6" img_width="379" img_height="477" alt="走進前端開發系列二" inline="0"><p class="pgc-img-caption"></p></div><p>族長說:“是啊,XMLHttpReqeust也要遵守同源策略。”</p><p>JavaScript說:“可是這沒有道理啊!我雖然是從book.com來的,但是為什麼不讓我訪問beauty.com?”</p><p>族長說:“我這也是為了防止黑客攻擊,給你舉個例子,假設你的主人登錄了book.com , 然後又去訪問beauty.com,如果這個beauty.com是個惡意網站,它也要求你創建一個XMLHttpRequest對象,通過這個對象向book.com(不同源)發起請求,獲取你主人的賬戶信息,會發生什麼情況? ”</p><p>JavaScript恍然大悟:“奧,我懂了,由於主人登錄過了book.com,登錄cookie什麼的都在,那beauty.com的JavaScript 向book.com發起的XMLHttpRequest請求也會成功,我主人的賬戶信息就會被黑客給獲取了。”</p><p>我說:“看來對XMLHttpReqeust對象施加同源策略也是非常重要的啊!”</p><p>JavaScript沉默了半天說:“那怎麼辦?”</p><p>Mozilla族長說:“你可以通過服務器端中轉啊,例如你是來自book.com的, 現在想訪問movie.com,那可以讓那個book.com把請求轉發給movie.com嘛!人類好像給這種方式起了個名字,叫什麼代理模式,那個book.com就是代理人。”</p><div class="pgc-img"><img class="lazy" data-original="http://p3.pstatp.com/large/pgc-image/1530515425479be827b6b6b" img_width="1" img_height="1" alt="走進前端開發系列二" inline="0"><p class="pgc-img-caption"></p></div><div class="pgc-img"><img class="lazy" data-original="http://p3.pstatp.com/large/pgc-image/15305154287979d16c9917f" img_width="202" img_height="486" alt="走進前端開發系列二" inline="0"><p class="pgc-img-caption"></p></div><p>JavaScript急忙說:“不不, 這樣太麻煩了,族長你想想,如果我要訪問多個不同源的系統,要是都通過book.com中轉,該多麻煩!”</p><p>族長想了想說:“你說得有一定道理,我給你出個主意,既然服務器(domain)之間是互信的,那一個服務器(domain)可以設置一個白名單,裡邊列出它允許哪些服務器(domain)的AJAX請求。假設movie.com的白名單中有book.com, 那當屬於book.com的JavaScript試圖訪問movie.com的時候......”</p><p>JavaScript馬上接口說:“ 這時候,我們瀏覽器做點手腳,悄悄地把當前的源(book.com)發過去,詢問下movie.com, 看看他是否允許我們訪問,如何允許,你們就繼續訪問,否則就報錯!”</p><div class="pgc-img"><img class="lazy" data-original="http://p3.pstatp.com/large/pgc-image/1530515425479be827b6b6b" img_width="1" img_height="1" alt="走進前端開發系列二" inline="0"><p class="pgc-img-caption"></p></div><div class="pgc-img"><img class="lazy" data-original="http://p99.pstatp.com/large/pgc-image/1530515425537402f53d648" img_width="610" img_height="347" alt="走進前端開發系列二" inline="0"><p class="pgc-img-caption"></p></div><p>組長說:“就是這個意思,這樣以來,那些黑客就沒有辦法假冒用戶向這些互信的服務器發送請求了, 我把這個方法叫做Cross Origin Resource Sharing,簡稱<strong>CORS</strong>,只不過這個方法需要服務器的配合了,JavaScript表示同意,這也算是一個不錯的妥協方法了。請看下回。。。。。。</p></div>


分享到:


相關文章: