【安全】CSRF、XSS攻擊了解與防范


==============================

目錄

  一、了解CSRF攻擊及防范

  二、了解XSS攻擊及防范

===============================

 

 

一、了解CSRF攻擊及防范

 

1、了解csrf

  中文叫跨站請求偽造,指攻擊者誘導受害者進入第三方網站,在第三方網站中,向被攻擊網站發送跨站請求。利用受害者在被攻擊網站已經獲取的注冊憑證(剛登錄不久的登錄cookie),繞過后台的用戶驗證,達到冒充用戶對被攻擊的網站執行某項操作的目的。

 

2、csrf解決原理

  攻擊者是利用用戶的登錄狀態來發起 CSRF 攻擊,而 Cookie 正是瀏覽器和服務器之間維護登錄狀態的一個關鍵數據,因此要阻止 CSRF 攻擊,我們首先就要考慮在 Cookie 問題。

 

3、解決方案

  3.1、Cookie中的SameSite設置

    服務端響應時,Set-Cookie將SameSite設置成Strict,限制第三方 Cookie,從而減少安全風險。

     第三方Cookie(第三方網站引導發出的 Cookie)意思是在C網站引導你發出A網站的請求攜帶A網站的cookie。

  

  3.2、利用同源策略

    可檢查請求頭hander的referer,服務端檢查請求頭referer 值,看是否是同源請求
  

  3.3、Token認證

    在用戶登錄時,服務器生成一個 Token 返回給用戶,在瀏覽器端向服務器發起請求時,帶上Token,服務器端驗證 Token(如何帶上token,可在url后面添加參數;可在hander頭部自定義屬性添加;表單post請求可在 form 的最后加上 <input type=”hidden” name=”csrftoken” value=”tokenvalue”/>,這樣就把 token 以參數的形式加入請求了)。
    如何添加token,加在那里可以看下面連接:鏈接

  

  3.4、驗證碼

    這個道理很簡單,也是目前使用最廣泛的一種方式。驗證碼則強制用戶必須與應用進行交互,才能完成最終請求。但該方式用戶體驗較差;

 

================================================================================

 

 

二、了解XSS攻擊及防范

 

1、了解xss

  XSS是跨站腳本攻擊(Cross Site Scripting),為不和層疊樣式表(Cascading Style Sheets, CSS)的縮寫混淆,故將跨站腳本攻擊縮寫為XSS。惡意攻擊者往Web頁面里插入惡意Script代碼,當用戶瀏覽該頁之時,嵌入其中Web里面的Script代碼會被執行,從而達到惡意攻擊用戶的目的。

 

2、xss攻擊分兩類

  2.1、反射型XSS,又稱非持久型XSS

    通過url的方式傳遞給了服務器,而服務器則只是不加處理的把腳本“反射”回訪問者的瀏覽器而使訪問者的瀏覽器 執行相應的腳本。

  2.2、儲存型XSS,也就是持久型XSS

    儲存到數據庫中,然后當我們再次訪問相同頁面時,將惡意腳本從數據庫中取出並返回給瀏覽器執行。例如留言板植入srcrip。



3、xss攻擊可以做什么

  3.1、盜用cookie實現無密碼登錄

    攻擊者插入一段可執行的 JavaScripts 腳本,該腳本會讀出用戶瀏覽器的 cookies 並將它傳輸給攻擊者,攻擊者得到用戶的 Cookies 后,即可冒充用戶。

  

  3.2、劫持流量實現惡意跳轉(劫持訪問)    

<script>window.location.href="http://www.baidu.com";</script>

  

  3.3、配合csrf攻擊完成惡意請求

    Csrf攻擊就是在未經你許可的情況下用你的名義發送惡意請求(比如修改密碼,銀行轉賬等)。例如再留言板植入,修改密碼的get請求,如果不用原密碼比對就能惡意修改所有訪問該頁面的用戶的密碼。

 

4、xss攻擊防范手段

  4.1、首先是過濾對諸如<script>、<img>、<a>等標簽進行過濾。

  4.2、其次是編碼像一些常見的符號,如<>在輸入的時候要對其進行轉換編碼,這樣做瀏覽器是不會對該標簽進行解釋執行的,同時也不影響顯示效果。

  4.3、最后是限制。通過以上的案例我們不難發現xss攻擊要能達成往往需要較長的字符串,因此對於一些可以預期的輸入可以通過限制長度強制截斷來進行防御。

 

5、編碼防范具體例子

  5.1、利用document.createTextNode 源生的方法,轉義快速且全面

var htmlEncode = function (str) {
    var div = document.createElement('div')
    div.appendChild(document.createTextNode(str))
    return div.innerHTML
}

  5.2、利用正則來替換特殊字符串來實現


6、xss額外知識

  6.1、谷歌瀏覽器對於鏈接做了嚴格的xss檢測,現在鏈接上植入xss難度高了很多。火狐就簡單很多

    6.2、某些廠商的cookie有其他驗證措施如:Http-Only保證同一cookie不能被濫用


免責聲明!

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



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