php反序列化換行,php序列化和反序列化

本文目錄一覽:

請寫出php變量序列化和反序列化的函數,並舉出1個應用例子

PHP中的序列化和反序列化分別通過函數serialize()和unserialize()即可實現。serialize()的參數可以是resource類型外的所有變量類型,最常見的是用來序列化對象,unseialize()將serialize的返回結果作為參數,進行反序列化,得到原對象。$str = serialize ($obj);…$obj222 = unserialize($str);現在可以用$object222對象來執行該對象可以執行的各種操作。在用serialize序列化對象時,會自動調用__sleep方法,__sleep方法必須返回一個數組,包含需要串行化的屬性。 PHP會拋棄其它屬性的值, 如果沒有__sleep方法,PHP將保存所有屬性,包括private屬性。用unserialize反序列化對象時,PHP 會調用__wakeup方法。__sleep和__wakeup方法可以根據實際需要,都添加上,也可以只要其中的一個,當然也可以都不要。下面給出一個序列化的代碼:共serialize.php和unserialize.php兩個文件。// serialize.php?php

class User

{

private $name;

private $id;

public $sex=”F”;

function __construct()

{

//give user a unique ID 賦予一個不同的ID

$this-id = uniqid();

}

function __sleep()

{

//do not serialize this-id 不串行化id

return(array(“name”,”sex”));

}

function __wakeup()

{

//give user a unique ID

$this-id = uniqid();

}

function p(){

echo “in function p() \t”;

return $this-name;

}

function setname($name){

$this-name = $name;

}

} //create object 建立一個對象

$u = new User;

$u-setname(“pphu”);

//serialize it 串行化

$s = serialize($u);

echo “in serialize.php br/”;

print_r($s);

echo “br/”;

print_r($u);

echo “br/br/”;

? //// unserialize.php?php

include(‘serialize.php’);

//global $s;

$u2 = unserialize($s);

echo “in unserialize.phpbr/”;

echo $u2-p().”br/”;

echo $u2-sex.”br/”;

print_r($u2);

?

php如何循環反序列化?

1.構造HITCON類反序列化字符串,其中$method=’login’,$args數組』username』部分可用於構造SQL語句,進行SQL注入,’password』部分任意設置。

2.調用login()函數後,利用username構造聯合查詢,使查詢結果為SoFun類反序列化字符串,設置username構造聯合查詢,使查詢結果為SoFun類反序列化字符串,設置username構造聯合查詢,使查詢結果為SoFun類反序列化字符串,設置file=『flag.php』,需繞過__wakeup()函數。

3.繞過oadData()函數對反序列化字符串的驗證。

4.SoFun類 __destruct()函數調用後,包含flag.php文件,獲取flag,需繞過__wakeup()函數。

php中序列化與反序列化

把複雜的數據類型壓縮到一個字符串中

serialize() 把變量和它們的值編碼成文本形式

unserialize() 恢復原先變量

eg:

結果:a:3:{i:0;s:3:”Moe”;i:1;s:5:”Larry”;i:2;s:5:”Curly”;}

Array ( [0] = Moe [1] = Larry [2] = Curly )

當把這些序列化的數據放在URL中在頁面之間會傳遞時,需要對這些數據調用urlencode(),以確保在其中的URL元字符進行處理:

margic_quotes_gpc和magic_quotes_runtime配置項的設置會影響傳遞到unserialize()中的數據。

如果magic_quotes_gpc項是啟用的,那麼在URL、POST變量以及cookies中傳遞的數據在反序列化之前必須用stripslashes()進行處理:

如果magic_quotes_runtime是啟用的,那麼在向文件中寫入序列化的數據之前必須用addslashes()進行處理,而在讀取它們之前則必須用stripslashes()進行處理:

當對一個對象進行反序列化操作時,PHP會自動地調用其__wakeUp()方法。這樣就使得對象能夠重新建立起序列化時未能保留的各種狀態。例如:數據庫連接等。

php的序列化和反序列化有什麼好處

序列化是將變量轉換為可保存或傳輸的字符串的過程;反序列化就是在適當的時候把這個字符串再轉化成原來的變量使用。這兩個過程結合起來,可以輕鬆地存儲和傳輸數據,使程序更具維護性。

PHP中的序列化和反序列化分別通過函數serialize()和unserialize()即可實現。serialize()的參數可以是resource類型外的所有變量類型,最常見的是用來序列化對象,unseialize()將serialize的返回結果作為參數,進行反序列化,得到原對象。

在PHP中,序列化和反序列化很多地方都可以用到!~

例如:數據庫連接,序列化數組等等。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/285315.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-22 15:44
下一篇 2024-12-22 15:44

相關推薦

  • 金額選擇性序列化

    本文將從多個方面對金額選擇性序列化進行詳細闡述,包括其定義、使用場景、實現方法等。 一、定義 金額選擇性序列化指根據傳入的金額值,選擇是否進行序列化,以達到減少數據傳輸的目的。在實…

    編程 2025-04-29
  • PHP和Python哪個好找工作?

    PHP和Python都是非常流行的編程語言,它們被廣泛應用於不同領域的開發中。但是,在考慮擇業方向的時候,很多人都會有一個問題:PHP和Python哪個好找工作?這篇文章將從多個方…

    編程 2025-04-29
  • PHP怎麼接幣

    想要在自己的網站或應用中接受比特幣等加密貨幣的支付,就需要對該加密貨幣擁有一定的了解,並使用對應的API進行開發。本文將從多個方面詳細闡述如何使用PHP接受加密貨幣的支付。 一、環…

    編程 2025-04-29
  • 理解Java反序列化(Java Deserialization Vulnerability)

    本文將從多個方面深入探討Java反序列化漏洞,對於筆者所總結的經驗和教訓,以及掌握Java反序列化的設計模式、最佳實踐和防範措施。 一、Java反序列化漏洞概述 Java反序列化漏…

    編程 2025-04-28
  • 使用PHP foreach遍歷有相同屬性的值

    本篇文章將介紹如何使用PHP foreach遍歷具有相同屬性的值,並給出相應的代碼示例。 一、基礎概念 在講解如何使用PHP foreach遍歷有相同屬性的值之前,我們需要先了解幾…

    編程 2025-04-28
  • PHP獲取301跳轉後的地址

    本文將為大家介紹如何使用PHP獲取301跳轉後的地址。301重定向是什麼呢?當我們訪問一個網頁A,但是它已經被遷移到了另一個地址B,此時若服務器端做了301重定向,那麼你的瀏覽器在…

    編程 2025-04-27
  • PythonIDE換行的使用

    本文將為大家介紹在PythonIDE中如何進行換行的操作。 一、使用回車鍵進行換行 PythonIDE中最簡單的換行方式就是使用回車鍵進行換行。只需要按下回車鍵,就可以在當前行的末…

    編程 2025-04-27
  • 自動換行後不能全部顯示文字的解決方法

    在網頁設計中,自動換行是非常必要的。但是有時候會出現自動換行後不能全部顯示文字的情況。下面將從多個方面闡述這個問題的解決方法。 一、字號和行高 字號和行高是影響內容顯示的兩個重要因…

    編程 2025-04-27
  • PHP登錄頁面代碼實現

    本文將從多個方面詳細闡述如何使用PHP編寫一個簡單的登錄頁面。 1. PHP登錄頁面基本架構 在PHP登錄頁面中,需要包含HTML表單,用戶在表單中輸入賬號密碼等信息,提交表單後服…

    編程 2025-04-27
  • Python format函數換行指南

    解答format函數換行問題,並提供實用示例 一、format函數的基本用法 Python中的format函數是一種傳遞參數的方式,用于格式化字符串輸出。它通過使用大括號{}來標識…

    編程 2025-04-27

發表回復

登錄後才能評論