深圳做積分商城網站設計品牌宣傳
? ? ? ? 隨著互聯網的迅猛發(fā)展,Web應用的普及程度也愈發(fā)廣泛。然而,隨之而來的是各種安全威脅的不斷涌現,其中最為常見而危險的之一就是跨站腳本攻擊(Cross-Site Scripting,簡稱XSS)。XSS攻擊一直以來都是Web安全領域的重點關注對象,其危害程度不可小覷。
? ? ? ?在此篇博客中,我將深度剖析XSS攻擊,從其基本原理到實際案例,探討其可能帶來的后果以及如何有效地防范。通過對XSS攻擊的全面解析,我們希望讀者能夠更全面地了解這一Web安全漏洞,并采取相應的措施保護自己的Web應用。
一、會話管理
1、WEB會話管理概述
(1)、為什么需要會話管理
http是無狀態(tài)的,一次請求結束,連接斷開服務器再收到請求,無法識別此連接是哪個用戶為了需要辨別訪問用戶,需要一種記錄用戶的方式
(2)、web應用會話管理的方式
session的管理方式
cookie的管理方式
token的管理方式
2、SESSION管理方式
(1)、認證過程
①、服務端session是用戶第一次訪問應用時,服務器就會創(chuàng)建的對象。
②、服務器并為每一個session都分配一個唯一的sessionid。
③、服務器在創(chuàng)建完session后,會把sessionid通過cdokie返回給用戶所在的瀏覽器
④、當用戶第二次向服務器發(fā)送請求的時候,就會通過cookie把sessionid傳回給服務器
⑤、用戶再次請求,服務器能夠根據sessionid找到與該用戶對應的session信息。
(2)、認證過程
(3)、相關問題
①、這種方式將會話信息存儲在web服務器里面,當用戶同時在線量比較多時,這些會話信息會占據比較多的內存;
②、當應用采用集群部署的時候,會遇到多臺web服務器之間如何做session共享的問題
③、多個應用要共享session時,還會遇到跨域問題
(4)、實驗代碼邏輯
(5)、前端代碼
<html><meta charset="utf-8"><form action="login.php" method="POST">username:<br><input type="text" name="username"><br>password:<br><input type="text" name="password"><br><input type="submit" value="Submit"></form></html>
(6)、后端代碼
①、后端代碼(login.php)
<?phpsession_start0;$usr = $_POSTTusername'];$pwd = $_POSTI'password'];if($usr==='admin'&&$pwd==='admin'){echo'登錄成功';$_SESSION["admin"]=1;var_dump($_SESSION);}else{echo登錄失敗';}?>②、后端代碼 (check.php)<?phpsession_start0);var_dump($_SESSION);if($_SESSION["admin"]==1){echo"沒錯你就是管理員",}else{echo"我不知道你是誰",}?>③、后端代碼 (unset.php)<?phpsession_start0;unset($_SESSIONTuser']);session_destroy();?>
3、COOKIE管理方式
(1)、Cookie基礎
①、Cookie是由HTTP服務器設置的
②、Cookie信息保存在瀏覽器中
(2)、Cookie和Session最大區(qū)別:
①、Cookie將數據存儲客戶端
②、Seesion將數據存儲在服務器端
(3)、認證過程
①、用戶發(fā)起登錄請求,服務端根據傳入的用戶密碼之類的身份信息。
②、服務端驗證用戶是否滿足登錄條件,如果滿足,就根據用戶信息創(chuàng)建一個登錄憑證
③、服務端把上一步創(chuàng)建好的登錄憑證,先對它做數字簽名,然后再用對稱加密算法做加密處理。
④、將簽名、加密后的字串,寫入cookie。cookie的名字必須固定。
⑤、用戶登錄后發(fā)起后續(xù)請求,服務端根據上一步存登錄憑證的cookie名字,獲取到相關的cookie值。
(4)、認證過程
(5)、相關問題
①、實現了服務端無狀態(tài)化
②、cookie有大小限制,存儲不了大多數據
③、每次傳送cookie,增加了請求的數量,對訪問性能也有影響
④、同樣存在跨域問題(不同域名無法互相讀取cookie)
4、TOKEN管理方式
(1)、token管理方式
①、流程和實現上跟cookie-based基本無區(qū)別。
②、cookie-based里面寫到cookie里面的ticket,此情景稱為token。
③、token在請求都必須通過url參數或者是http header的形式,主動帶上token。
(2)、認證過程
二、Session攻擊
1、關于session攻擊
(1)、主要攻擊方式
首先通過捕獲或者固定合法用戶的session,然后冒充該用戶來訪問系統(tǒng)
(2)、三種方式來獲取一個有效的session標識符
①、預測 ???②、捕獲 (劫持) ?????③、固定
2、認證憑證預測
(1)、原理
預測需要攻擊者猜測出系統(tǒng)中使用的有效的session標識符,類似暴力破解
(2)、目前Session安全
①、PHP生成隨機的session id極其復雜的并且難于被預測出來
②、PHP生成session字符串無任何規(guī)律和順序
3、會話劫持
(1)、含義
①、會話劫持 (Session hijacking).
②、通過竊取合法用戶Session ID后,使用該Session ID登錄目標賬號的攻擊方法。
③、會話劫持最重要的部分是取得一個合法的會話標識來偽裝成合法用戶
(2)、攻擊步驟
①、目標用戶需要先登錄站點
②、登錄成功后,該用戶會得到站點提供的一個會話標識SessionID
③、攻擊者通過某種攻擊手段捕獲Session ID
④、擊者通過捕獲到的Session ID訪問站點即可獲得目標用戶合法會話
(3)、會話劫持過程
(4)、攻擊者獲取Session?ID的方式有多種
①、暴力破解:嘗試各種SessionID,直到破解為止
②、預測: 如果SessionID使用非隨機的方式產生,那么就有可能計算出來
③、竊取: 使用網絡嗅探,XSS攻擊等方法獲得
(5)、XSS攻擊:
①、跨站腳本 (Cross-Site Scripting,XSS)攻擊者利用網站漏洞把惡意的腳本代碼注入到網頁之中
②、當其他用戶瀏覽這些網頁時,就會執(zhí)行其中的惡意代碼。
③、主要對受害用戶采取Cookie資料竊取、會話劫持、釣魚欺騙等各種攻擊
(6)、中間人攻擊:
中間人 (MITM)
攻擊者將它自己放到兩方之間,通常是客戶端和服務端通信線路的中間通過破壞原始頻道之后攔截一方的消息并將它們轉發(fā)給另一方來實現。
4、會話固定
(1)、什么是會話固定
①、會話固定 (Session fixation)
②、誘騙受害者使用攻擊者指定的會話標識 (SessionID)的攻擊手段
③、這是攻擊者獲取合法會話標識的最簡單的方法。
(2)、攻擊步驟
①、攻擊者通過某種手段重置目標用戶的SessionID,然后監(jiān)聽用戶會話狀態(tài)
②、目標用戶攜帶攻擊者設定的Session ID登錄站點;
③、攻擊者通過Session ID獲得合法會話;
(3)、會話固定過程
(4)、重置cookie的方式
①、使用客戶端腳本來設置Cookie到瀏覽器
<script> document.cookie='PHPSESSID=99999';</script>
(5)、防御方案
①、開啟Httponly阻止攻擊者讀取Cookie
但有少數低版本瀏覽器存在漏洞,即使設置了HttpOnly,也可以重寫Cookie
(6)、重置cookie的方式
①、HTML的<META>標簽加Set-Cookie屬性
<meta http-equiv=Set-Cookie'content=PHPSESSID=23333'>
三、Cookie安全
1、Cookie安全
(1)、Cookie字段
- [name][value][domain][path][expires][httponly][secure]
- 依次是: 名稱、值、域名、相對根路徑、過期時間、是否有httponly標志、是否有secure標志
(2)、子域Cookie
①、domain字段,設置cookie時如不指定則默認是本域
例如www.360.com通過javaScript設置一個cookie:document.cookie=“test=1"
例如www.360.com通過javaScript設置一個父域:document.cookie=“test=1; domain=360.com”
(3)、路徑Cookie
①、path字段,設置cookie時如不指定則默認是當前頁面路徑
例如www.360.com/admin/index.php頁面設置一個cookiedocument.cookie=“test=1"
- Path值是/admin???????????只有該/admin/徑下的頁面才能讀取到該cookie
2、HttpOnly
(1)、什么是HttpOnly
- HttpOnly是Cookie的一種屬性
- 指示瀏覽器不要在除HTTP (和 HTTPS)請求之外暴露Cookie。
- PHP setCookie0最后一項
(2)、如何設置
Cookie操作函數setcookie函數和setrawcookie函數也專門添加了第7個參數來做為HttpOnly的選項。
開啟方法為:
<?phpsetcookie("abc","test", NULL, NULL,NULL,NULL,TRUE);setrawcookie("abc","test", NULL,NULL, NULLNULL,TRUE);?>
(3)、相關函數
setcookie():
setcookie() 函數向客戶端發(fā)送一個 HTTP cookie
(4)、設置httponly
(5)、讀取HttpOnly Cookie
- Phpinfo()
②、CVE-2012-0053
Apache服務器2.2.0-2.2.21版本存在一個漏洞攻擊者可通過給網站植入超大的Cookie,使得HTTP頭超過apache的LimitRequestFieldSize (最大請求長度)4192字節(jié),apache便會返回400錯誤并在返回信息中包含了http-onlycookies
3、Cookie存儲
(1)、本地存儲與內存存儲
①、存儲方式與過期時間 (expires) 相關。
②、沒設置過期時間,則是內存Cookie,瀏覽器關閉cookie失效:
③、設置了時間點,cookie會以文本的形式保存在系統(tǒng)本地。
④、Document.cookie=expires=1;expires=Mon, 01 Jan 2020 00:00:00 GMT方式更安全
(2)、Cookie本地存儲方式
瀏覽器本地存儲方式: