帶你了解CSRF和XSS(一)


  瀏覽器的同源策略限制了一些跨域行為,但仍有些特例(img、iframe、script標簽)不受跨域限制,這就給XSS攻擊創造了機會(這完全不是同源策略的鍋,一定是程序員的鍋)。

  在講下面的內容前,還是要提一下Cookie,Cookie是用來辨別用戶身份的重要依據。來做個形象的比喻,有一天,小A去了一家新開的理發店,店里的托尼老師不認識小A,於是小A就辦了一張VIP卡,當小A第二次去這家理發店的時候,店里的托尼老師刷了下小A的卡,想起來了你是小A啊,今天搞什么樣的造型啊~ Cookie就是那張VIP卡,用於辨別用戶身份。

  Cookie包含以下幾個屬性

  采用 Name = Value 的鍵值對形式存儲數據,Name是唯一的

  Domain:域名,限制哪些域名下可以使用(該VIP卡僅限本店使用)

  Path:路徑,只有這個路徑前綴的才可用(該VIP卡僅限燙頭)

  Expires:過期時間(該VIP卡有效期一年)

  HTTP(HTTPOnly):只有瀏覽器請求時,才會在請求頭中帶着,JavaScript無法讀寫

  Secure:非HTTPS請求時不帶

  SameSite:用於定義cookie如何跨域發送

  Cookie就先簡單說到這里,回到XSS攻擊,后續講到的XSS和CSRF攻擊都會圍繞着怎么獲取Cookie來舉例。

 

  XSS(Cross-site-Script跨站腳本攻擊),通常是帶有頁面可解析內容的數據未經處理直接插入到頁面上解析造成的。XSS根據攻擊腳本的引入位置來區分為存儲型XSS、反射型XSS以及MXSS(也叫DOM XSS)三種。

         根據上面的描述來舉個例子:
         假設有一個論壇存在XSS漏洞,用戶小A在該論壇的一篇帖子中留言到

  當小A寫的留言被該論壇保存下來之后,如果有其他的用戶看到了這條評論(相當於打開了這個頁面,執行了hark.js,hark.js里面內容大致是獲取Cookie,發送請求),那么這些用戶的Cookie都會發送到小A事先寫好的信息收集網站中進行保存,然后小A就可以用這些Cookie進行登錄啦。

  上述這種XSS攻擊屬於存儲型,提交的代碼會被存儲在服務器端,下次請求目標網站時不用再提交XSS代碼。所以這種類型的主要原因是前端提交的數據未經處理直接存儲到數據庫,然后從數據庫中讀取出來后直接插入到頁面中導致的。

 

繼續講故事:

         假設有一個網站lalala存在XSS漏洞,網址是http://www.lalala.com。然后有一天小A在郵件里發現一封郵件,內容是一張你懂得圖片然后配下面的標簽。

  小A好奇啊,然后就點了進去,如果在此之前小A登錄過lalala網站,那么他的Cookie就被盜走了。

  這種XSS攻擊屬於反射型,發出請求時,XSS代碼出現在URL中,作為輸入提交到服務器,服務器解析后響應,XSS代碼隨着響應內容一起傳回給瀏覽器,最后瀏覽器解析執行XSS代碼。這個過程像一次反射,故叫做反射型XSS。

 

  MXSS則是在渲染DOM屬性時將攻擊腳本插入DOM屬性中被解析而導致的。

至此,三種類型的XSS攻擊都描述完了,你看確實都是程序員的鍋吧。

         服務端可以做以下動作:

         1、剛剛上面講到Cookie中有個屬性時HTTP,設置為True,不允許JavaScript讀取cookies,但該屬性只適配部分瀏覽器。對於HTTPS可以設置Secure

         2、處理富文本框輸入內容,進行XSS過濾,過濾類似script、iframe、form等標簽以及轉義存儲

         客戶端可以做以下動作:

         1、輸入檢查,和服務端一樣都要做。
         2、輸出檢查,編碼轉義,如果使用jquery,就是那些append、html、before、after等,插入DOM的方法需要注意。現今大部分的MV*框架在模板(view層)會自動處理XSS問題。

 

         XSS攻擊的危害是很大的,像上面的例子注入script可以執行任何的JS代碼(意味着可以獲取cookie等信息了),注入style可以把頁面全部弄崩。尤其是具有評論功能的網站需要注意防范此類攻擊,不要相信客戶端發送過來的任何數據!還有就是不要亂點開奇奇怪怪的鏈接啦~

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM