国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術(shù)文章
文章詳情頁

PHP安全-會話劫持

瀏覽:138日期:2022-09-12 08:38:26
會話劫持

最常見的針對會話的攻擊手段是會話劫持。它是所有攻擊者可以用來訪問其它人的會話的手段的總稱。所有這些手段的第一步都是取得一個合法的會話標識來偽裝成合法用戶,因此保證會話標識不被泄露非常重要。前面幾節(jié)中關(guān)于會話暴露和固定的知識能幫助你保證會話標識只有服務(wù)器及合法用戶才能知道。

深度防范原則(見第一章)可以用在會話上,當會話標識不幸被攻擊者知道的情況下,一些不起眼的安全措施也會提供一些保護。作為一個關(guān)心安全的開發(fā)者,你的目標應(yīng)該是使前述的偽裝過程變得更復(fù)雜。記住無論多小的障礙,都會以你的應(yīng)用提供保護。

把偽裝過程變得更復(fù)雜的關(guān)鍵是加強驗證。會話標識是驗證的首要方法,同時你可以用其它數(shù)據(jù)來補充它。你可以用的所有數(shù)據(jù)只是在每個HTTP請求中的數(shù)據(jù):

GET / HTTP/1.1

Host: example.org

User-Agent: Firefox/1.0

Accept: text/html, image/png, image/jpeg, image/gif, */*

Cookie: PHPSESSID=1234

你應(yīng)該意識到請求的一致性,并把不一致的行為認為是可疑行為。例如,雖然User-Agent(發(fā)出本請求的瀏覽器類型)頭部是可選的,但是只要是發(fā)出該頭部的瀏覽器通常都不會變化它的值。如果你一個擁有1234的會話標識的用戶在登錄后一直用Mozilla Firfox瀏覽器,突然轉(zhuǎn)換成了IE,這就比較可疑了。例如,此時你可以用要求輸入密碼方式來減輕風(fēng)險,同時在誤報時,這也對合法用戶產(chǎn)生的沖擊也比較小。你可以用下面的代碼來檢測User-Agent的一致性:

<?php

session_start();

if (isset($_SESSION[’HTTP_USER_AGENT’]))

{

if ($_SESSION[’HTTP_USER_AGENT’] != md5($_SERVER[’HTTP_USER_AGENT’]))

{

/* Prompt for password */

exit;

}

}

else

{

$_SESSION[’HTTP_USER_AGENT’] = md5($_SERVER[’HTTP_USER_AGENT’]);

}

?>

我觀察過,在某些版本的IE瀏覽器中,用戶正常訪問一個網(wǎng)頁和刷新一個網(wǎng)頁時發(fā)出的Accept頭部信息不同,因此Accept頭部不能用來判斷一致性。

確保User-Agent頭部信息一致的確是有效的,但如果會話標識通過cookie傳遞(推薦方式),有道理認為,如果攻擊者能取得會話標識,他同時也能取得其它HTTP頭部。由于cookie暴露與瀏覽器漏洞或跨站腳本漏洞相關(guān),受害者需要訪問攻擊者的網(wǎng)站并暴露所有頭部信息。所有攻擊者要做的只是重建頭部以防止任何對頭部信息一致性的檢查。

比較好的方法是產(chǎn)生在URL中傳遞一個標記,可以認為這是第二種驗證的形式(雖然更弱)。使用這個方法需要進行一些編程工作,PHP中沒有相應(yīng)的功能。例如,假設(shè)標記保存在$token中,你需要把它包含在所有你的應(yīng)用的內(nèi)部鏈接中:

<?php

$url = array();

$html = array();

$url[’token’] = rawurlencode($token);

$html[’token’] = htmlentities($url[’token’], ENT_QUOTES, ’UTF-8’);

?>

<a href='http://www.cgvv.com.cn/bcjs/index.php?token=<?php echo $html[’token’]; ?>'>Click Here</a>

為了更方便地管理這個傳遞過程,你可能會把整個請求串放在一個變量中。你可以把這個變量附加到所有鏈接后面,這樣即便你一開始沒有使用該技巧,今后還是可以很方便地對你的代碼作出變化。

該標記需要包含不可預(yù)測的內(nèi)容,即便是在攻擊者知道了受害者瀏覽器發(fā)出的HTTP頭部的全部信息也不行。一種方法是生成一個隨機串作為標記:

<?php

$string = $_SERVER[’HTTP_USER_AGENT’];

$string .= ’SHIFLETT’;

$token = md5($string);

$_SESSION[’token’] = $token;

?>

當你使用隨機串時(如SHIFLETT),對它進行預(yù)測是不現(xiàn)實的。此時,捕獲標記將比預(yù)測標記更為方便,通過在URL中傳遞標記和在cookie中傳遞會話標識,攻擊時需要同時抓取它們二者。這樣除非攻擊者能夠察看受害者發(fā)往你的應(yīng)用所有的HTTP請求原始信息才可以,因為在這種情況下所有內(nèi)容都暴露了。這種攻擊方式實現(xiàn)起來非常困難(所以很罕見),要防止它需要使用SSL。

有專家警告不要依賴于檢查User-Agent的一致性。這是因為服務(wù)器群集中的HTTP代理服務(wù)器會對User-Agent進行編輯,而本群集中的多個代理服務(wù)器在編輯該值時可能會不一致。

如果你不希望依賴于檢查User-Agent的一致性。你可以生成一個隨機的標記:

<?php

$token = md5(uniqid(rand(), TRUE));

$_SESSION[’token’] = $token;

?>

這一方法的安全性雖然是弱一些,但它更可靠。上面的兩個方法都對防止會話劫持提供了強有力的手段。你需要做的是在安全性和可靠性之間作出平衡。

標簽: PHP
相關(guān)文章:
主站蜘蛛池模板: 日本特黄特色大片免费看 | 国产成人福利免费观看 | 国产在线精品香蕉综合网一区 | 国产精品福利午夜h视频 | 国产精品黄在线观看免费 | 真人一级毛片免费观看视频 | 怡红院视频网 | 18岁禁黄色| 三级黄色片网址 | 国产精品亚洲精品日韩已满 | 免费手机黄色网址 | 久久亚洲精品中文字幕三区 | 欧美另类丝袜 | 99热热久久这里只有精品166 | 热re91久久精品国产91热 | aa级毛片毛片免费观看久 | 日韩欧美一区二区不卡看片 | 欧美亚洲一区二区三区在线 | 欧美性aaa | 久久免费观看国产精品 | 日韩欧美国产高清在线观看 | 青草青99久久99九九99九九九 | 欧美一级高清片免费一级 | 一级美女片| 欧美在线一区二区三区不卡 | 在线免费看黄色 | 免费观看a毛片一区二区不卡 | 日韩中文字幕免费观看 | 一区二区三区在线 | 欧 | 色播基地 | 日本美女视频韩国视频网站免费 | 一级视频在线免费观看 | 九九香蕉视频 | 欧美最猛性xxxxx亚洲精品 | 大片在线播放日本一级毛片 | 最新亚洲精品国自产在线 | 国产精品日本欧美一区二区 | 韩国理伦一级毛片 | 久久精品中文字幕首页 | 欧美成人三级 | 毛片免费在线视频 |