序列化與反序列化

2021-09-26 11:00:46 字數 1490 閱讀 7001

序列化serialize() 把複雜的資料型別轉化為字串,方便儲存和傳輸。資料型別可以是字串,陣列,對 象等

反序列化unserialize() 將字串轉化為原始資料型別

 將傳來的序列化資料直接unserilize,造成魔幻函式執行

 php session序列化及反序列化處理器設定不當

序列化字串格式

序列化對於不同型別得到的字串格式為:

string : s:size:value;

integer : i:value;

boolean : b:value;(儲存1或0)

null : n;

a::
其中表示陣列元素的個數,、……表示陣列下標,、……表示與下標相對應的陣列元素的值。

物件(object)通常被序列化為:

o::""::
其中表示物件的類名的字串長度。表示物件中的字段個數。這些字段包括在物件所在類及其祖先類中用 var、public、protected 和 private 宣告的字段,但是不包括 static 和 const 宣告的靜態字段。也就是說只有例項(instance)字段。

、……表示每個欄位的欄位名,而、……則表示與欄位名所對應的字段值。

o:3:「foo」:2:

 o:3 引數型別為物件(object),

 「foo」:2 引數名為foo,有兩個值

 s:4:「file」;s:9:「shell.php」; 引數型別為字串,長度為4,引數值為shell.php

 object foo,屬性file:shell.php,屬性data:aaaaa

魔術函式

 __construct() – 當乙個物件被建立時呼叫

 __destruct() – 當乙個物件被銷毀時呼叫

 __sleep() – serialize()函式會呼叫該方法,用於清理物件,並返回乙個 包含物件種所有應被序列化的變數名稱的陣列

 __wakeup() – unserialize()函式會呼叫該方法,預先準備物件需要的資 源

 _tostring() – 用於乙個類被當成字串時應怎樣回應

 __invoke() – 當嘗試以呼叫函式的方式呼叫乙個物件時會呼叫該方法

cve-2016-7124

當序列化字串中表示物件屬性個數的值大於真實的屬性個數時會跳過 __wakeup的執行。

 sugarcrm v6.5.23 php反序列化物件注入漏洞分析

 由hitcon 2016一道web聊一聊php反序列化漏洞

序列化和反序列化 C 序列化與反序列化。

序列化介紹 把物件用一種新的格式來表示。系列化只序列化資料。序列化不建議使用自動屬性 為什麼要序列化 將乙個複雜的物件轉換流,方便儲存與資訊交換。class program class person public int age 二進位制序列化 就是將物件變成流的過程,把物件變成byte class...

序列化與反序列化

把複雜的資料型別壓縮到乙個字串中 serialize 把變數和它們的值編碼成文字形式 unserialize 恢復原先變數 eg stooges array moe larry curly new serialize stooges print r new echo print r unserial...

序列化與反序列化

序列化是將物件處理為位元組流以儲存物件或傳輸到記憶體 資料庫或檔案。其主要目的是儲存物件的狀態,以便可以在需要時重新建立物件。相反的過程稱為反序列化。通過序列化,開發人員可以儲存物件的狀態,並在需要時重新建立該物件,從而提供物件的儲存以及資料交換。通過序列化,開發人員還可以執行類似如下的操作 通過 ...