**一、從SOP到CORS**
? ? ? SOP就是Same Origin Policy同源策略,指一個域的文檔或腳本,不能獲取或修改另一個域的文檔的屬性。也就是Ajax不能跨域訪問,我們之前的Web資源訪問的根本策略都是建立在SOP上的。它導致很多web開發者很痛苦,后來搞出很多跨域方案,比如JSONP和flash socket。如下圖所示:

? ? ??后來出現了CORS-CrossOrigin Resources Sharing,也即跨源資源共享,它定義了一種瀏覽器和服務器交互的方式來確定是否允許跨域請求。它是一個妥協,有更大的靈活性,但比起簡單地允許所有這些的要求來說更加安全。簡言之,CORS就是為了讓AJAX可以實現可控的跨域訪問而生的。具體可以參見我的這篇文章《[HTML5安全:CORS(跨域資源共享)簡介](http://blog.csdn.net/hfahe/article/details/7730944)》。示意如下圖所示:

? ? ??現在W3C的[官方文檔](http://www.w3.org/TR/cors/)目前還是工作草案,但是正在朝著W3C推薦的方向前進。不過目前許多現代瀏覽器都提供了對它的支持。
? ? ??服務器端對于CORS的支持,主要就是通過設置Access-Control-Allow-Origin來進行的。如果瀏覽器檢測到相應的設置,就可以允許Ajax進行跨域的訪問。例如:
~~~
Access–Control-Allow-Origin: http://blog.csdn.net
~~~
? ? ??應用CORS的系統目前包括Face.com、GoogleCloudStorage API等,主要是為開放平臺向第三方提供訪問的能力。
**二、CORS帶來的風險**
? ? ??CORS非常有用,可以共享許多內容,不過這里存在風險。因為它完全是一個盲目的協議,只是通過HTTP頭來控制。
? ? ??它的風險包括:
? ? ??1、HTTP頭只能說明請求來自一個特定的域,但是并不能保證這個事實。因為HTTP頭可以被偽造。
? ? ??所以未經身份驗證的跨域請求應該永遠不會被信任。如果一些重要的功能需要暴露或者返回敏感信息,應該需要驗證Session ID。
? ? ??2、第三方有可能被入侵
? ? ??舉一個場景,FriendFeed通過跨域請求訪問Twitter,FriendFeed請求tweets、提交tweets并且執行一些用戶操作,Twitter提供響應。兩者都互相相信對方,所以FriendFeed并不驗證獲取數據的有效性,Twitter也針對Twitter開放了大部分的功能。
? ? ??但是當如果Twitter被入侵后:
? ? ??FriendFeed總是從Twitter獲取數據,沒有經過編碼或者驗證就在頁面上顯示這些信息。但是Twitter被入侵后,這些數據就可能是有害的。
? ? ??或者FriendFeed被入侵時:
? ? ??Twitter響應FriendFeed的請求,例如發表Tweets、更換用戶名甚至刪除賬戶。當FriendFeed被入侵后,攻擊者可以利用這些請求來篡改用戶數據。
? ? ??所以對于請求方來說驗證接收的數據有效性和服務方僅暴露最少最必須的功能是非常重要的。
? ? ??3、惡意跨域請求
? ? ??即便頁面只允許來自某個信任網站的請求,但是它也會收到大量來自其他域的跨域請求。.這些請求有時可能會被用于執行應用層面的DDOS攻擊,并不應該被應用來處理。
? ? ??例如,考慮一個搜索頁面。當通過'%'參數請求時搜索服務器會返回所有的記錄,這可能是一個計算繁重的要求。要擊垮這個網站,攻擊者可以利用XSS漏洞將Javascript腳本注入某個公共論壇中,當用戶訪問這個論壇時,使用它的瀏覽器重復執行這個到服務器的搜索請求。或者即使不采用跨域請求,使用一個目標地址包含請求參數的圖像元素也可以達到同樣的目的。如果可能的話,攻擊者甚至可以創建一個WebWorker執行這種攻擊。這會消耗服務器大量的資源。
? ? ??有效的解決辦法是通過多種條件屏蔽掉非法的請求,例如HTTP頭、參數等。
? ? ??4、內部信息泄漏
? ? ??假定一個內部站點開啟了CORS,如果內部網絡的用戶訪問了惡意網站,惡意網站可以通過COR(跨域請求)來獲取到內部站點的內容。
? ? ??5、針對用戶的攻擊
? ? ??上面都是針對服務器的攻擊,風險5則針對用戶。比方說,攻擊者已經確定了你可以全域訪問的productsearch.php頁面上存在SQL注入漏洞。?攻擊者并不是直接從它們的系統數據庫中獲取數據,他們可能會編寫一個JavaScript數據采集腳本,并在自己的網站或者存在XSS問題的網站上插入這段腳本。當受害者訪問含有這種惡意JavaScript腳本的網站時,它的瀏覽器將執行針對“productsearch.php”的SQL注入攻擊,采集所有的數據并發送給攻擊者。檢查服務器日志顯示是受害人執行了攻擊,因為除了來自Referrer的HTTP頭一般沒有其他日志記錄。受害者并不能說他的系統被攻破,因為沒有任何任何惡意軟件或系統泄漏的痕跡。
**三、攻擊工具**
? ? ??[Shell of the Future](http://www.andlabs.org/tools/sotf/sotf.html)是一個反向WebShell處理器,它利用HTML5的跨站請求來劫持會話。

**四、防御之道**
? ? ??1、不信任未經身份驗證的跨域請求,應該首先驗證Session ID或者Cookie。
? ? ??2、對于請求方來說驗證接收的數據有效性,服務方僅暴露最少最必須的功能。
? ? ??3、通過多種條件屏蔽掉非法的請求,例如HTTP頭、參數等。
? ? 原創文章,轉載請注明:來自[蔣宇捷的博客](http://blog.csdn.net/hfahe)
- 前言
- AutoPager的簡單實現
- 利用CSS3特性巧妙實現漂亮的DIV箭頭
- IE9在Win7下任務欄新特性簡介
- 瀏覽器九宮格的簡單實現
- Raphael js庫簡介
- 使用CSS3構建Ajax加載動畫
- 用CSS3創建動畫價格表
- 用CSS3實現瀏覽器的縮放功能
- 用純CSS3實現QQ LOGO
- 用CSS3創建旋轉載入器
- 使用Javascript開發移動應用程序
- 用HTML5創建超酷圖像灰度漸變效果
- 使用CSS3創建文字顏色漸變(CSS3 Text Gradient)
- 僅用CSS創建立體旋轉幻燈片
- 如何創建跨瀏覽器的HTML5表單
- 用CSS3實現動畫進度條
- HTML5 Guitar Tab Player
- 奇妙的HTML5 Canvas動畫實例
- 談HTML5和CSS3的國際化支持
- 實現跨瀏覽器的HTML5占位符
- 前端開發必備工具:WhatFont Bookmarklet-方便的查詢網頁上的字體
- 使用HTML5和CSS3來創建幻燈片
- HTML5之美
- 如何使用HTML5創建在線精美簡歷
- 以小見大、由淺入深-談如何面試Javascript工程師
- 快速入門:HTML5強大的Details元素
- 用CSS3實現圖像風格
- HTML5視頻字幕與WebVTT
- 用純CSS3實現Path華麗動畫
- 用3個步驟實現響應式網頁設計
- 遇見CSS3濾鏡
- 關于CSS3濾鏡的碎念
- 用純CSS3繪制萌系漫畫人物動態頭像
- CSS3新的鼠標樣式介紹
- 用HTML5獻上愛的3D玫瑰
- 對HTML5 Device API相關規范的解惑
- 如何使用HTML5實現拍照上傳應用
- 2012第一季度國外HTML5移動開發趨勢
- HTML5新特性:范圍樣式
- 百度開發者大會-《用HTML5新特性開發移動App》PPT分享
- Chrome 19對于HTML5最新支持的動態:電池狀態API,全屏API,震動API,語音API
- 遇見Javascript類型數組(Typed Array)
- 用HTML5 Audio API開發游戲音樂
- 用HTML5實現人臉識別
- 用Javascript實現人臉美容
- Chrome 20對于HTML5最新支持的動態:顏色輸入,網絡信息API,CSS著色器
- 用HTML5實現手機搖一搖的功能
- 用HTML5實現iPad應用無限平滑滾動
- 用非響應式設計構建跨端Web App
- 了解SVG
- HTML5圖像適配介紹
- HTML5安全:內容安全策略(CSP)簡介
- HTML5安全:CORS(跨域資源共享)簡介
- 用CSS3 Region和3D變換實現書籍翻頁效果
- 談談移動App的思維誤區
- Chrome新特性:文件夾拖拽支持
- 《關注HTML5安全》
- HTML5安全風險詳析之一:CORS攻擊
- HTML5安全風險詳析之二:Web Storage攻擊
- HTML5圖像適配最新進展:響應式圖片規范草案
- HTML5移動Web App相關標準狀態及路線圖
- HTML5安全風險詳析之三:WebSQL攻擊
- Chrome引入WebRTC支持視頻聊天App
- HTML5安全風險詳析之四:Web Worker攻擊
- HTML5安全風險詳析之五:劫持攻擊
- HTML5安全風險詳析之六:API攻擊
- HTML5安全攻防詳析之七:新標簽攻擊
- 在iOS Safari中播放離線音頻
- 使用WebRTC實現遠程屏幕共享
- Firefox、Android、iOS遇見WebRTC
- HTML5光線傳感器簡介
- HTML5安全攻防詳析之八:Web Socket攻擊
- HTML5安全攻防詳析之完結篇:HTML5對安全的改進
- 激動人心!在網頁上通過語音輸入文字 - HTML5 Web Speech API介紹
- Web滾動性能優化實戰
- 用CSS3設計響應式導航菜單
- 用HTML5構建高性能視差網站
- 漫談@supports與CSS3條件規則
- HTML5下載屬性簡介
- 如何開發優秀的HTML5游戲?-迪斯尼《尋找奧茲之路》游戲技術詳解(一)
- 如何開發優秀的HTML5游戲?-迪斯尼《尋找奧茲之路》游戲技術詳解(二)
- 趨勢:Chrome為打包應用提供強大新特性
- 從HTML5移動應用現狀談發展趨勢
- 基于HTML5的Web跨設備超聲波通信方案