色尼玛亚洲综合影院,亚洲3atv精品一区二区三区,麻豆freexxxx性91精品,欧美在线91

PHP session會(huì)話(huà)的安全性分析

從而達(dá)到方便快捷的目的,但是它在存儲(chǔ)信息的時(shí)候往往會(huì)有一些敏感的東西,這些東西可能成為被攻擊的目標(biāo),如銀行的賬號(hào)、信用卡事務(wù)或檔案記錄等。這就要求在編寫(xiě)代碼的時(shí)候必須采取安全措施來(lái)減少攻擊成功的可能性。

主要的安全措施有以下兩個(gè)方面。

1、防止攻擊者獲取用戶(hù)的會(huì)話(huà)ID。

獲取會(huì)話(huà)ID的方式很多,攻擊者可以通過(guò)查看明文通信來(lái)獲取,所以把會(huì)話(huà)ID放在URL中或者放在通過(guò)未加密連接傳輸?shù)腃ookie中是很危險(xiǎn)的;還有在URL中(作為_(kāi)get()參數(shù))傳遞會(huì)話(huà)ID也是不安全的,因?yàn)闉g覽器歷史緩存中會(huì)存儲(chǔ)URL,這樣就很容易被讀取。(可以考慮使用ssh進(jìn)行加密傳輸)

還有一種更為隱蔽的攻擊手段,攻擊者通過(guò)一個(gè)被腳本攻擊突破的Web站點(diǎn),把被突破的這個(gè)站點(diǎn)上的用戶(hù)重新定向到另一個(gè)站點(diǎn),然后在重新定向的站點(diǎn)的URL中插入以下代碼:
?phpSESSID=213456465412312365465412312;

最后發(fā)送到Web應(yīng)用程序。當(dāng)用戶(hù)查看Web應(yīng)用程序時(shí),php會(huì)發(fā)現(xiàn)沒(méi)有與這個(gè)會(huì)話(huà)ID相關(guān)聯(lián)的數(shù)據(jù)并且會(huì)創(chuàng)建一些數(shù)據(jù)。用戶(hù)不知道發(fā)生了什么,但攻擊者卻知道了會(huì)話(huà)ID,就可以利用這個(gè)會(huì)話(huà)ID進(jìn)入應(yīng)用程序。

要防止這種攻擊,有兩種方法。
(1)檢查php.ini中是否打開(kāi)了session.use_only_cookie。如果是這種情況,php會(huì)拒絕基于URL的會(huì)話(huà)ID。
(2)當(dāng)啟動(dòng)會(huì)話(huà)時(shí),在會(huì)話(huà)數(shù)據(jù)中放一個(gè)變量,這個(gè)變量表示會(huì)話(huà)是用戶(hù)創(chuàng)建的;如果發(fā)現(xiàn)會(huì)話(huà)數(shù)據(jù)中沒(méi)有這個(gè)變量,那就說(shuō)明會(huì)話(huà)ID是假的,就可以調(diào)用session_regenerate_id函數(shù),給現(xiàn)有會(huì)話(huà)分配一個(gè)新的會(huì)話(huà)ID。

示例:

通過(guò)判斷變量是否存在來(lái)確定會(huì)話(huà)ID的真假,如果存在,則說(shuō)明會(huì)話(huà)ID是真的,否則是假的,并使用session_regenerate_id()函數(shù)對(duì)會(huì)話(huà)ID進(jìn)行更改,重新給會(huì)話(huà)創(chuàng)建一個(gè)新的會(huì)話(huà)ID,

代碼如下:
復(fù)制代碼 代碼如下:
< ?php
session_start () ;
if (!isset ( $_SESSION['shili1'] )) { //判斷shili1變量是否配置
$old_id = session_id () ; //原來(lái)的會(huì)話(huà)ID的變量名
session_regenerate_id () ; //獲取一個(gè)新的會(huì)話(huà)ID
$new_id = session_id () ; //新的會(huì)話(huà)ID的變量名
echo "old : $old_id<br/>" ; //輸出原來(lái)的會(huì)話(huà)ID
echo "new : $new_id<br/>" ; //輸出新的會(huì)話(huà)ID
$_SESSION['shili1'] = TRUE ; }
?>

運(yùn)行結(jié)果如圖所示:

這只是一個(gè)示例,輸出會(huì)話(huà)ID是為了更好的理解和應(yīng)用這個(gè)函數(shù),而在程序設(shè)計(jì)中是不需要輸出會(huì)話(huà)ID的。

2、限制攻擊者獲取會(huì)話(huà)ID。

限制攻擊者獲取會(huì)話(huà)ID的方法如下。
(1)使用一個(gè)函數(shù)(md5)計(jì)算User-Agent頭加上某些附加字符串?dāng)?shù)據(jù)后的散列值(hash)。(散列函數(shù)(hash function)接受一個(gè)任意大的數(shù)據(jù)集,并且將它轉(zhuǎn)換為一個(gè)看起來(lái)完全不同的數(shù)據(jù),這個(gè)數(shù)據(jù)很短。產(chǎn)生的散列值是完全不可重現(xiàn)的,也不可能由另一個(gè)輸入產(chǎn)生。)

在User-Agent字符串后面添加一些數(shù)據(jù),攻擊者就無(wú)法通過(guò)對(duì)常見(jiàn)的代理值計(jì)算md5編碼來(lái)試探User-Agent字符串。

(2)將這個(gè)經(jīng)過(guò)編碼的字符串保存在用戶(hù)的會(huì)話(huà)數(shù)據(jù)中。
(3)每次從這個(gè)用戶(hù)接收到請(qǐng)求時(shí),檢查這個(gè)散列值。

此方案的代碼如下:
復(fù)制代碼 代碼如下:
<?php
define ( ‘ua_seed','webapp' ) ;
session_start () ;
if ( !isset($_SESSION['user_agent'] )){
$_SESSION['user_agent'] = md5 ( $_SERVER['HTTP_USER_AGENT'].ua_seed );
}else{
if ($_SESSION['user_agent'] != md5($_SERVER['HTTP_USER_AGENT'].ua_seed)){} }
?>

通過(guò)給攻擊者制造一些麻煩,使攻擊者即使獲取了會(huì)話(huà)ID,也無(wú)法進(jìn)行破壞,能夠減少對(duì)系統(tǒng)造成的損失。

php技術(shù)PHP session會(huì)話(huà)的安全性分析,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 宜兴市| 宝兴县| 花垣县| 梁河县| 那曲县| 深水埗区| 新和县| 垣曲县| 会昌县| 沙洋县| 旌德县| 周至县| 漳浦县| 平湖市| 北安市| 昆明市| 桦川县| 泾阳县| 容城县| 阆中市| 黑龙江省| 周至县| 镶黄旗| 双城市| 清流县| 山丹县| 旅游| 乌审旗| 馆陶县| 登封市| 额济纳旗| 蚌埠市| 石河子市| 盖州市| 丰原市| 舞钢市| 积石山| 庐江县| 鹤庆县| 额敏县| 遂川县|