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