??這里主要講講傳統的PHP中的“服務(wù)端Session”。至于什么是服務(wù)端Session,什么是客戶(hù)端Session,可以看看P神的**客戶(hù)端 session 導致的安全問(wèn)題。Session概念:在計算機中,尤其是在網(wǎng)絡(luò )應用中,稱(chēng)為“會(huì )話(huà)控制”。Session 對象存儲特定用戶(hù)會(huì )話(huà)所需的屬性及配置信息。這樣,當用戶(hù)在應用程序的 Web 頁(yè)之間跳轉時(shí),存儲在 Session 對象中的變量將不會(huì )丟失,而是在整個(gè)用戶(hù)會(huì )話(huà)中一直存在下去。下面就由小編和大家講一講php session利用總結。
??當用戶(hù)請求來(lái)自應用程序的 Web 頁(yè)時(shí),如果該用戶(hù)還沒(méi)有會(huì )話(huà),則 Web 將自動(dòng)創(chuàng )建一個(gè) Session 對象。當會(huì )話(huà)過(guò)期或被放棄后,服務(wù)器將終止該會(huì )話(huà)。
??Session機制:session內容一般以文件的形式存儲于服務(wù)器中,而本地瀏覽器會(huì )存儲一個(gè)與服務(wù)器中session文件對應的Cookie值,Cookie存儲的是鍵值為“PHPSESSID”的Seeion_id值,用戶(hù)在訪(fǎng)問(wèn)應用時(shí),每次跳轉發(fā)生請求時(shí),會(huì )自動(dòng)把這個(gè)存儲session_id的Cookie值發(fā)送過(guò)去,因此web應用的所有頁(yè)面都可以獲取到這個(gè)SESSION_ID值,也就可以通過(guò)session_id獲取服務(wù)器中存儲的session值,當用戶(hù)關(guān)閉瀏覽器后,cookie存儲的session_id自動(dòng)清除,一般服務(wù)器存儲的session文件也會(huì )在30分鐘后自動(dòng)清除。
??一、比如在wamp環(huán)境下,index.php如下:
??session_start();
??phpinfo();
???>
??首先理解一下session_start()
??當會(huì )話(huà)自動(dòng)開(kāi)始或者通過(guò) session_start() 手動(dòng)開(kāi)始的時(shí)候, PHP 內部會(huì )依據客戶(hù)端傳來(lái)的PHPSESSID來(lái)獲取現有的對應的會(huì )話(huà)數據(即session文件),PHP 會(huì )自動(dòng)反序列化session文件的內容,并將之填充到 $_SESSION 超級全局變量中。如果不存在對應的會(huì )話(huà)數據,則創(chuàng )建名為sess_PHPSES SID(客戶(hù)端傳來(lái)的)的文件。如果客戶(hù)端未發(fā)送PHPSESSID,則創(chuàng )建一個(gè)由32個(gè)字母組成的PHPSESSID,并返回set-cookie。
??可以看到請求中對應的PHPSESSID:ifrvi9r7ui81r0fjq569b06862
??在服務(wù)器端,即/wamp/tmp下我們就可以發(fā)現一個(gè)生成的記錄Session的文件,因為也沒(méi)有記錄什么會(huì )話(huà)信息,因此該文件是一個(gè)空文件。
??補充一下關(guān)于php-Session相關(guān)配置的說(shuō)明
??在php.ini中對Session存在許多配置,這里我們通過(guò)phpinfo來(lái)說(shuō)明幾個(gè)重要的點(diǎn)。
??說(shuō)明如下:
??session.save_path="" --設置session的存儲路徑
??session.save_handler="" --設定用戶(hù)自定義存儲函數,如果想使用PHP內置會(huì )話(huà)存儲機制之外的可以使用本函數(等方式),默認files以文件存儲
??session.auto_start boolen --指定會(huì )話(huà)模塊是否在請求開(kāi)始時(shí)啟動(dòng)一個(gè)會(huì )話(huà),默認為0不啟動(dòng)
??session.serialize_handler string --定義用來(lái)序列化/
??二、常見(jiàn)的php-session存放位置
??/var/lib/php5/sess_PHPSESSID/var/lib/php7/sess_PHPSESSID/var/lib/php/sess_PHPSESSID/tmp/sess_PHPSESSID/tmp/sessions/sess_PHPSESSED0x02 Session可能導致的攻擊面
??Session序列化攻擊Session文件包含Session偽造用戶(hù)登錄Session邏輯漏洞0x03 Session序列化攻擊
??Serialize_handler
??要了解Session序列化攻擊,先來(lái)了解一下Session機制中對序列化是如何處理的。
??在php中存在三種序列化處理引擎
??本地測試如下:
??Session文件內容分別對應結果為
??test|s:7:"CoCo1er";
??tests:7:"CoCo1er";
??a:1:{s:4:"test";s:7:"CoCo1er";}
??攻擊利用原理
??payload千萬(wàn)條,原理第一條。
??(這里補充說(shuō)一點(diǎn),PHP中的Session的實(shí)現是沒(méi)有的問(wèn)題,危害主要是由于程序員的Session使用不當而引起的。如下)
??使用不同引擎來(lái)處理session文件
??如果在PHP在反序列化存儲的$_SESSION數據時(shí)使用的引擎和序列化使用的引擎不一樣,會(huì )導致數據無(wú)法正確第反序列化。通過(guò)精心構造的數據包,就可以繞過(guò)程序的驗證或者是執行一些系統的方法。例如:
??在這么一種情況下:
??假如我們使用php_serialize引擎時(shí)進(jìn)行數據存儲時(shí)的序列化,可以得到內容
??$_SESSION[‘key’] = ‘Boby’;
??a:1:{s:3:”key”;s:4:”Boby”;}
??三、這時(shí)我們的解析采用了另一種引擎:php
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。
Copyright ? 2009-2022 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 特網(wǎng)科技 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 百度云 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站