標籤:his ;; sla customize handler 網頁 過程 soc creat
?php.ini中存在三項配置項:
session.save_path="" --設定session的儲存路徑
session.save_handler=""--設定使用者自訂儲存函數,如果想使用PHP內建會話儲存機制之外的可以使用本函數(資料庫等方式)
session.auto_start boolen--指定會話模組是否在請求開始時啟動一個會話預設為0不啟動
session.serialize_handler string--定義用來序列化/還原序列化的處理器名字。預設使用php
以上的選項就是與PHP中的Session儲存和序列話儲存有關的選項。
在使用xampp組件安裝中,上述的配置項的設定如下:
session.save_path="D:\xampp\tmp"表明所有的session檔案都是儲存在xampp/tmp下
session.save_handler=files 表明session是以檔案的方式來進行儲存的
session.auto_start=0表明預設不啟動session
session.serialize_handler=php 表明session的預設序列話引擎使用的是php序列話引擎
在上述的配置中,session.serialize_handler是用來設定session的序列話引擎的,除了預設的PHP引擎之外,還存在其他引擎,不同的引擎所對應的session的儲存方式不相同。
php_binary:儲存方式是,鍵名的長度對應的ASCII字元+鍵名+經過serialize函數序列化處理的值
php:儲存方式是,鍵名+豎線+經過serialize函數序列處理的值
php_serialize(php>5.5.4):儲存方式是,經過serialize函數序列化處理的值
在PHP中預設使用的是PHP引擎,如果要修改為其他的引擎,只需要添加代碼ini_set('session.serialize_handler', '需要設定的引擎');。範例程式碼如下:
<?php
ini_set('session.serialize_handler''php_serialize');
session_start;
// do something
儲存機制
php中的session中的內容並不是放在記憶體中的,而是以檔案的方式來儲存的,儲存方式就是由配置項session.save_handler來進行確定的,預設是以檔案的方式儲存。
儲存的檔案是以sess_sessionid來進行命名的,檔案的內容就是session值的序列話之後的內容。
假設我們的環境是xampp,那麼預設配置如上所述。
在預設配置情況下:
<?php
session_start
$_SESSION['name']='spoock';
var_dump;
?>
最後的session的儲存和顯示如下:
可以看到PHPSESSID的值是jo86ud4jfvu81mbg28sl2s56c2,而在xampp/tmp下儲存的檔案名稱是sess_jo86ud4jfvu81mbg28sl2s56c2,檔案的內容是name|s:6:"spoock";。name是索引值,s:6:"spoock";是serialize("spoock")的結果。
在php_serialize引擎下:
<?php
ini_set('session.serialize_handler''php_serialize');
session_start;
$_SESSION['name']='spoock';
var_dump;
?>
SESSION檔案的內容是a:1:{s:4:"name";s:6:"spoock";}。a:1是使用php_serialize進行序列話都會加上。同時使用php_serialize會將session中的key和value都會進行序列化。
在php_binary引擎下:
<?php
ini_set('session.serialize_handler''php_binary');
session_start;
$_SESSION['name']='spoock';
var_dump;
?>
SESSION檔案的內容是names:6:"spoock";。由於name的長度是4,4在ASCII表中對應的就是EOT。根據php_binary的儲存規則,最後就是names:6:"spoock";。(突然發現ASCII的值為4的字元無法在網頁上面顯示,這個大家自行去查ASCII表吧)
序列化簡單利用
test.php
<?php
classsyclover{
var$func="";
function__construct{
$this->func="phpinfo";
}
function__wakeup{
eval($this->func);
}
}
unserialize($_GET['a']);
?>
在11行對傳入的參數進行了序列化。我們可以通過傳入一個特定的字串,還原序列化為syclover的一個樣本,那麼就可以執行eval方法。我們訪問localhost/test.php?a=O:8:"syclover":1:{s:4:"func";s:14:"echo "spoock";";}。那麼還原序列化得到的內容是:
object(syclover)[1]
public'func'=>string'echo "spoock";'(length=14)
最後頁面輸出的就是spoock,說明最後執行了我們定義的echo "spoock";方法。
這就是一個簡單的序列化的漏洞的示範
PHP Session中的序列化危害
PHP中的Session的實現是沒有的問題,危害主要是由於程式員的Session使用不當而引起的。
如果在PHP在還原序列化儲存的$_SESSION資料時使用的引擎和序列化使用的引擎不一樣,會導致資料無法正確第還原序列化。通過精心構造的資料包,就可以繞過程式的驗證或者是執行一些系統的方法。例如:
$_SESSION['ryat']='|O:11:"PeopleClass":0:{}';
上述的$_SESSION的資料使用php_serialize,那麼最後的儲存的內容就是a:1:{s:6:"spoock";s:24:"|O:11:"PeopleClass":0:{}";}。
但是我們在進行讀取的時候,選擇的是php,那麼最後讀取的內容是:
array(size=1)
'a:1:{s:6:"spoock";s:24:"'=>
object(__PHP_Incomplete_Class)[1]
There are multiple header layouts available that allow you to utilize background images, office locations and hours and social media links. Multi-lingual sites even have the ability to add a language drop down menu. On a related note, Consulting WP comes with seven language files, is compatible with WPML and is translation-ready.
WordPress Customizer
Consulting WP is compatible with the WordPress Customizer, which you can use to preview changes to the theme’s options in real-time.
Create Your Own Layouts
With the included Visual Composer page builder plugin, you can create your own complex page layouts without having to touch code.
Features that Work for Business
PHP 中Session 還原序列化機制的三種方法