久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

深入講解PHP的對(duì)象注入(Object Injection)

這篇文章主要介紹了PHP中對(duì)象注入的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),相信對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來一起看看吧。

前言

雖然這篇文章叫做PHP對(duì)象注入,但是本質(zhì)上還是和PHP的序列化的不正確使用有關(guān)。如果你閱讀了PHP中的SESSION反序列化機(jī)制對(duì)序列化就會(huì)有一個(gè)大致的認(rèn)識(shí)。PHP對(duì)象注入其實(shí)本質(zhì)上也是由于序列化引起的。

基礎(chǔ)知識(shí)

在php類中可能會(huì)存在一些叫做魔術(shù)函數(shù)(magic 函數(shù)),這些函數(shù)會(huì)在類進(jìn)行某些事件的時(shí)候自動(dòng)觸發(fā),例如__construct()會(huì)在一個(gè)對(duì)象被創(chuàng)建時(shí)調(diào)用, __destruct()會(huì)在一個(gè)對(duì)象銷毀時(shí)調(diào)用, __toString當(dāng)對(duì)象被當(dāng)做一個(gè)字符串的時(shí)候被調(diào)用。常見的魔術(shù)函數(shù)有__construct() __destruct() __toString() __sleep() __wakeup()

舉例如下:

<?php
class test{
 public $varr1="abc";
 public $varr2="123";
 public function echoP(){
  echo $this->varr1."<br>";
 }
 public function __construct(){
  echo "__construct<br>";
 }
 public function __destruct(){
  echo "__destruct<br>";
 }
 public function __toString(){
  return "__toString<br>";
 }
 public function __sleep(){
  echo "__sleep<br>";
  return array('varr1','varr2');
 }
 public function __wakeup(){
  echo "__wakeup<br>";
 }
}

$obj = new test();  //實(shí)例化對(duì)象,調(diào)用__construct()方法,輸出__construct
$obj->echoP();   //調(diào)用echoP()方法,輸出"abc"
echo $obj;    //obj對(duì)象被當(dāng)做字符串輸出,調(diào)用__toString()方法,輸出__toString
$s =serialize($obj);  //obj對(duì)象被序列化,調(diào)用__sleep()方法,輸出__sleep
echo unserialize($s);  //$s首先會(huì)被反序列化,會(huì)調(diào)用__wake()方法,被反序列化出來的對(duì)象又被當(dāng)做字符串,就會(huì)調(diào)用_toString()方法。
// 腳本結(jié)束又會(huì)調(diào)用__destruct()方法,輸出__destruct
?>

原理

為什么會(huì)用到序列話這樣的方法?主要就是就是方便進(jìn)行數(shù)據(jù)的傳輸,并且數(shù)據(jù)恢復(fù)之后,數(shù)據(jù)的屬性還不會(huì)發(fā)生變化。例如,將一個(gè)對(duì)象反序列化之后,還是保存了這個(gè)對(duì)象的所有的信息。同時(shí)還可以將序列化的值保存在文件中,這樣需要用的時(shí)候就可以直接從文件中讀取數(shù)據(jù)然后進(jìn)行反序列化就可以了。在PHP使用serialize()unserialize()來進(jìn)行序列化和反序列化的。

而序列化的危害就在于如果序列化的內(nèi)容是用戶可控的,那么用戶就可以注入精心構(gòu)造的payload。當(dāng)進(jìn)行發(fā)序列化的時(shí)候就有可能會(huì)出發(fā)對(duì)象中的一些魔術(shù)方法,造成意想不到的危害。

對(duì)象注入

本質(zhì)上serialize()unserialize()在PHP內(nèi)部實(shí)現(xiàn)上是沒有漏洞的,漏洞的主要產(chǎn)生是由于應(yīng)用程序在處理對(duì)象、魔術(shù)函數(shù)以及序列化相關(guān)問題的時(shí)候?qū)е碌摹?br />

如果在一個(gè)程序中,一個(gè)類用于臨時(shí)將日志存儲(chǔ)進(jìn)某個(gè)文件中,當(dāng)__destruct()方法被調(diào)用時(shí),日志文件被刪除。

代碼大致如下:

logfile.php

<?php
class LogClass {
 public $logfilename = "";
 public function logdata($text) {
  echo "log data".$text."<br/>";
  file_put_contents($this->logfilename,$text,FILE_APPEBD);
 }

 public function __destruct() {
  echo 'deletes'.$this->logfilename;
  unlink(dirname(__FILE__).'/'.$this->logfilename);
 }
}
?>

在其他類中使用LogClass

logLogin.php

<?php
include "index.php";
$obj = new LogClass();
$obj->logfilename = "login.log";
$obj->logdata('記錄日志');
?>

上面的這段代碼就是一個(gè)正常的使用LogClass類來完成日志記錄的功能。

下面顯示的是存在對(duì)象注入漏洞的使用例子。

news.php

<?php
include "logfile.php";
// some codes the use the LogClass
class User {
 public $age = 0;
 public $name = '';
 public function print_data() {
  echo "User".$this->name."is".$this->age."years old.<br/>";
 }
}

// 從用戶接受輸入發(fā)序列化為User對(duì)象
$usr = unserialize($_GET["user"]);
?>

上面顯示的代碼使用了LogClass對(duì)象同時(shí)還會(huì)從用戶那里接受輸入進(jìn)行發(fā)序列化轉(zhuǎn)化為一個(gè)User對(duì)象。

當(dāng)我們提交如下的數(shù)據(jù)

news.php?user=O:4:"User":2:{s:3:"age";i:20;s:4:"name";s:4:"John”;}

這樣的語句是可以正常使用的,也是程序員希望使用的方法。

但是如果提交的數(shù)據(jù)為:

news.php?user=O:8:"LogClass":1:{s:11:"logfilename";s:9:".htaccess";}

那么最后就會(huì)輸出delete .htaccess

可以看到通過構(gòu)造的數(shù)據(jù),導(dǎo)致執(zhí)行了LogClass中的__destruct()方法然后刪除了網(wǎng)站中重要的配置文件。

從上面這個(gè)例子也可以看出來,如果沒有嚴(yán)格控制用戶的輸入同時(shí)對(duì)用戶的輸入進(jìn)行了反序列化的操作,那么就有可能會(huì)實(shí)現(xiàn)代碼執(zhí)行的漏洞。

注入點(diǎn)

【網(wǎng)站聲明】本站除付費(fèi)源碼經(jīng)過測(cè)試外,其他素材未做測(cè)試,不保證完整性,網(wǎng)站上部分源碼僅限學(xué)習(xí)交流,請(qǐng)勿用于商業(yè)用途。如損害你的權(quán)益請(qǐng)聯(lián)系客服QQ:2655101040 給予處理,謝謝支持。

相關(guān)文檔推薦

主站蜘蛛池模板: 久久99这里只有精品 | 成人一区二区三区在线观看 | 午夜免费视频 | 91精品午夜窝窝看片 | 精品国产乱码久久久久久蜜柚 | 夜夜爽夜夜操 | 亚洲国产成人在线视频 | 最新中文字幕在线 | 偷牌自拍| 亚洲美女在线一区 | 少妇一级淫片免费放播放 | 99婷婷 | 丁香久久 | 亚洲av毛片 | 欧美视频在线免费 | 欧美a级成人淫片免费看 | 天天干天天操天天爽 | 久久久www成人免费精品 | 国产资源网| 国产黄色在线观看 | 日日夜夜天天 | 亚洲啊v在线 | 久久久综合网 | 久久久成人精品 | 在线精品一区二区三区 | 欧美成人精品在线 | 91视频在线 | 九九久久精品视频 | 性视频网| 成人久久| 一区二区在线 | 久久精品色视频 | 一级毛片播放 | 成人久久久 | 日本久久久久久久久 | 欧美精品日韩精品国产精品 | 精品一区二区三区在线观看国产 | 免费成人午夜 | 亚洲品质自拍视频 | 欧美日韩国产在线观看 | 国产成人精品区一区二区不卡 |