XSS、CSRF與驗證碼等等


XSS漏洞的原理

  XSS是應用最為廣泛的web安全漏洞之一,全稱為跨站腳本攻擊(cross site scripting),從名稱來看,應該是css,但是和層疊樣式表重疊,所以稱為XSS,另外,在英文中的關鍵詞是scripting,即和腳本有關,后面慢慢體會。

  

  這個名字是和他的來歷有關的,因為第一次演示這個漏洞的黑客是通過跨站的方式植入腳本進行攻擊的。 

  

  XSS漏洞的主要原理就是通過一切可能的手段將可以執行的腳本植入到頁面的代碼中,從而對用戶進行攻擊。 即實質上就是把代碼植入到對方的系統中去,由於xss漏洞是對web客戶端的攻擊,所以說植入的代碼基本上是以JavaScript和html標簽為主。

 

  比如對於一個簡單的留言板,在點擊了發送之后,內容隨之顯示出來, 但是, 如果黑客輸入了一段腳本,這段腳本就有可能被瀏覽器執行,通過這種方式,可能就會攻擊用戶。

  

  xss的類型主要可以分為持久性xss和非持久性xss

  其中持久性xss就是將客戶端攻擊的腳本植入到服務器上,從而導致每個正常訪問頁面的用戶都可以遭到xss腳本的攻擊 

  非持久性xss是對一個頁面的url中的某個參數做文章,把精心構造的腳本包含到url參數中,然后散步到網上,騙取用戶訪問這個url,從而來進行攻擊。 散布的方式可以是美女圖片等等。真實的目的就是為了騙取用戶訪問這個url。 

  非持久型的xss安全威脅小,因為只要服務器端業務代碼稍作調整就會是之失效。 

  所以持久性的xss攻擊影響力大,有時候服務器端需要刪除好幾張表,查詢很多庫,才能將由惡意代碼的數據全部清除。

  

  通過xss能做什么事情

  一般絕大多數的網絡攻擊都是把xss作為漏洞鏈中的第一環,通過xss,黑客可以得到最為直接的利益就是拿到用戶瀏覽器的cookie, 然后皆可以劫持session,進而竊取用戶的賬號。

  將xss配合csrf和sql注入等漏洞,可以在短時間內對一個服務器發起攻擊,並且服務器端無法將ip封死,因為ip是成百上千的xss受害者的ip

  

  如今的css相比網上的很多資料中,在技術上已經發生了很大的變化,因為各大網站已經加強了對於js腳本、html標簽等關鍵信息的過濾,單純依靠植入js是很難實施攻擊的了。

  

      

CSRF漏洞原理

  CSRF即為跨站請求偽造,我們主要將之分為狹義的CSRF和廣義的CSRF。

  

  狹義的csrf是指黑客通過將代碼植入到受害用戶的瀏覽器訪問頁面的前提下,用受害人的身份向服務器發起一個偽造的http請求,從而實現服務器CURD來執行相關操作。   這種原理比較簡單,實現起來也不是很復雜, 只要寫幾行js代碼就行。 

  這是絕大多數所講的方式。 

  廣義的csrf指csrf不一定要借助受害用戶的瀏覽器,黑客可以通過自己寫一個腳本偽造出一個和真實的http請求一模一樣的數據包發送給你的服務器,前提是你這個http接口中的所有參數都是可以預期的。 

可以看出,本質上來說,csrf漏洞就是將一個http接口中需要傳遞的參數都預測出來,不管用什么方式,都可以來調用你的接口,對服務器實現curd。

 

關鍵在於: 如果希望實現csrf, 要么先找到xss漏洞,然后將黑客的惡意代碼植入到頁面中去,以此來實現狹義的csrf; 要么就構造出一個url,將參數設置好,然后把url貼上騙用戶來訪問這個URL。 

 

所以,csrf和xss這兩個漏洞結合起來,將會爆發出巨大的威力。

  

 

  

如何防御csrf?

  一種方式就是使用token和reffer的防御方法,可以起到一定的作用,但不是絕對安全的。 

  實現方式:一個網站有很多web頁面,可以吧token播種一樣的埋在頁面上,然后所有的rest接口要求傳遞token,如果不傳遞token或者是token無效,就直接駁回請求。token不一定是種在頁面里的 ,也可以藏在前端頁面中的任何位置 ,只要前端js可以獲取到,就可以在每個ajax請求中帶上token,這樣就可以成功請求了。

  另外,可以在rest接口中對所有的請求頭的referrer做一個判斷,只允許網站的幾個固定頁面可以調用當前接口,這樣對於廣義的csrf和狹義的csrf都是由一定的作用的。

  但是token藏的再隱蔽,reffer限制的再嚴格,這一切都會暴露在前端,所以黑客可根據網站前端代碼進行分析,然后寫一套腳本自動化抓取token,然后對你的rest接口實施攻擊,這樣,這些努力都是白費了。   

  

  另一種有效的方式就是使用驗證碼了。

  這是一種非常強大的方式,比較多的就是圖形驗證碼,還有12306的驗證碼,這種方式破解驗證碼的代碼極高,所以可以防御99%以上的csrf。 

  但是不可能所有接口都是用驗證碼,這樣用戶體驗會很差,所以 比較好的方式是盡量減少圖形驗證碼的使用,對於一些操作不敏感的接口使用token+referrer來防御。

  

  但是圖形也不是絕對安全,因為目前圖像識別已經很先進,簡單的還是可以破解的。

 

  

  

 


免責聲明!

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



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