簡簡單單PHP物件序列化學習

2021-06-17 23:05:29 字數 1514 閱讀 6879

php還是比較常用的,於是我研究了一下php物件序列化,在這裡拿出來和大家分享一下,希望對大家有用。php物件序列化也是乙個比較普遍的功能,能夠把乙個物件進行序列化以後變成乙個字串,能夠儲存或者傳輸。我們先看乙個例子:

classtestclass  

functiongeta()  

functiongetb()  

}  $obj

=newtestclass

;  $str

=serialize

($obj);  

echo$str;  

輸出結果:

o:9:"testclass":2: 

我們來分析乙個物件序列化之後的字串。

o:9:"testclass":2:  

首先看對於物件本身的內容:o:9:"testclass":2:o是說明這是乙個物件型別(object),然後9是代表物件的名字查過濃度,2是代表該物件有幾個屬性。在看兩個屬性的內容:s:1:"a";s:9:"thisisa";其實跟陣列的內容比較類似,第一項:s:1:"a";是描述屬性名稱的,第二項s:9:"thisisa";是描述屬性值的。後面的屬性類似。先說一種php物件序列化的應用,下面的內容是php手冊上,沒有更改原文。serialize()返回乙個字串,包含著可以儲存於php的任何值的位元組流表示。unserialize()可以用此字串來重建原始的變數值。用序列化來儲存物件可以儲存物件中的所有變數。物件中的函式不會被儲存,只有類的名稱。

要能夠unserialize()乙個物件,需要定義該物件的類。也就是,如果序列化了page1.php中類a的物件$a,將得到乙個指向類a的字串幷包含有所有$a中變數的值。如果要在page2.php中將其解序列化,重建類a的物件$a,則page2.php中必須要出現類a的定義。這可以例如這樣實現,將類a的定義放在乙個包含檔案中,並在page1.php和page2.php都包含此檔案。

<?

php

classa  

}    

include("classa.inc");  

$a=newa

;  $s

=serialize

($a);  

//將$s存放在某處使page2.php能夠找到  

$fp=fopen

("store","w");  

fputs($fp,$s);  

fclose($fp);  

//為了正常解序列化需要這一行  

include("classa.inc");  

$s=implode

("",@file("store"));  

$a=unserialize

($s);  

//現在可以用$a物件的show_one()函式了  

$a->show_one();  

?>

css(簡簡單單學習)

cascading style sheet 層疊樣式表 css 表現 美化網頁 lang en charset utf 8 titletitle rel stylesheet href css style.css head 標題h1 body html h1 內部樣式 標籤內 行內樣式 style ...

PHP反序列化學習

利用反序列化漏洞的有兩個條件 1.unserialize 函式的引數可控 2.php中有可以利用的類並且類中有魔術函式 魔術方法就是在某些條件下自動執行的函式 序列化 sites array google runoob facebook serialized data serialize sites...

PHP反序列化學習

在理解這個漏洞前,你需要先搞清楚php中serialize unserialize 這兩個函式。序列化serialize 序列化說通俗點就是把乙個物件變成可以傳輸的字串,比如下面是乙個物件 class s s new s 建立乙個物件 serialize s 把這個物件進行序列化 序列化後得到的結果...