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

您的位置:首頁技術文章
文章詳情頁

PHP安全-會話固定

瀏覽:72日期:2022-09-12 08:44:57
會話固定

關于會話,需要關注的主要問題是會話標識的保密性問題。如果它是保密的,就不會存在會話劫持的風險了。通過一個合法的會話標識,一個攻擊者可以非常成功地冒充成為你的某一個用戶。

一個攻擊者可以通過三種方法來取得合法的會話標識:

l猜測

l捕獲

l固定

PHP生成的是隨機性很強的會話標識,所以被猜測的風險是不存在的。常見的是通過捕獲網絡通信數據以得到會話標識。為了避免會話標識被捕獲的風險,可以使用SSL,同時還要對瀏覽器漏洞及時修補。

小提示

要記住瀏覽器會根據請求中的Set-cookie頭部中的要求對之后所有的請求中都包含一個相應的Cookie頭部。最常見的是,會話標識會無謂的在對一些嵌入資源如圖片的請求中被暴露。例如,請求一個包含10個圖片的網頁時,瀏覽器會發出11個帶有會話標識的請求,但只有一個是有必要帶有標識的。為了防止這種無謂的暴露,你可以考慮把所有的嵌入資源放在有另外一個域名的服務器上。

會話固定是一種誘騙受害者使用攻擊者指定的會話標識的攻擊手段。這是攻擊者獲取合法會話標識的最簡單的方法。

在這個最簡單的例子中,使用了一個鏈接進行會話固定攻擊:

<a >Click Here</a>

另外一個方法是使用一個協議級別的轉向語句:

<?php

header(’Location: http://example.org/index.php?PHPSESSID=1234’);

?>

這也可以通過Refresh頭部來進行,產生該頭部的方法是通過真正的HTTP頭部或meta標簽的http-equiv屬性指定。攻擊者的目標是讓用戶訪問包含有攻擊者指定的會話標識的URL。這是一個基本的攻擊的第一步,完整的攻擊過程見圖4-3所示。

Figure 4-3. 使用攻擊者指定的會話標識進行的會話固定攻擊

PHP安全-會話固定

如果成功了,攻擊者就能繞過抓取或猜測合法會話標識的需要,這就使發起更多和更危險的攻擊成為可能。

為了更好地使你理解這一步驟,最好的辦法是你自己嘗試一下。首先建立一個名為fixation.php的腳本:

<?php

session_start();

$_SESSION[’username’] = ’chris’;

?>

確認你沒有保存著任何當前服務器的cookies,或通過清除所有的cookies以確保這一點。通過包含PHPSESSID的URL訪問fixation.php:

http://example.org/fixation.php?PHPSESSID=1234

它建立了一個值為chris的會話變量username。在檢查會話存儲區后發現1234成為了該數據的會話標識:

$ cat /tmp/sess_1234

username|s:5:'chris';

建立第二段腳本test.php,它在$_SESSION[‘username’]存在的情況下即輸入出該值:

<?php

session_start();

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

{

echo $_SESSION[’username’];

}

?>

在另外一臺計算機上或者在另一個瀏覽器中訪問下面的URL,同時該URL指定了相同的會話標識:

http://example.org/test.php?PHPSESSID=1234

這使你可以在另一臺計算機上或瀏覽器中(模仿攻擊者所在位置)恢復前面在fixation.php中建立的會話。這樣,你就作為一個攻擊者成功地劫持了一個會話。

很明顯,我們不希望這種情況發生。因為通過上面的方法,攻擊者會提供一個到你的應用的鏈接,只要通過這個鏈接對你的網站進行訪問的用戶都會使用攻擊者所指定的會話標識。

產生這個問題的一個原因是會話是由URL中的會話標識所建立的。當沒有指定會話標識時,PHP就會自動產生一個。這就為攻擊者大開了方便之門。幸運的是,我們以可以使用session_regenerate_id( )函數來防止這種情況的發生。

<?php

session_start();

if (!isset($_SESSION[’initiated’]))

{

session_regenerate_id();

$_SESSION[’initiated’] = TRUE;

}

?>

這就保證了在會話初始化時能有一個全新的會話標識。可是,這并不是防止會話固定攻擊的有效解決方案。攻擊者能簡單地通過訪問你的網站,確定PHP給出的會話標識,并且在會話固定攻擊中使用該會話標識。

這確實使攻擊者沒有機會去指定一個簡單的會話標識,如1234,但攻擊者依然可以通過檢查cookie或URL(依賴于標識的傳遞方式)得到PHP指定的會話標識。該流程如圖4-4所示。

該圖說明了會話的這個弱點,同時它可以幫助你理解該問題涉及的范圍。會話固定只是一個基礎,攻擊的目的是要取得一個能用來劫持會話的標識。這通常用于這樣的一個系統,在這個系統中,攻擊者能合法取得較低的權限(該權限級別只要能登錄即可),這樣劫持一個具有較高權限的會話是非常有用的。

如果會話標識在權限等級有改變時重新生成,就可以在事實上避開會話固定的風險:

<?php

$_SESSION[’logged_in’] = FALSE;

if (check_login())

{

session_regenerate_id();

$_SESSION[’logged_in’] = TRUE;

}

?>

Figure 4-4. 通過首先初始化會話進行會話固定攻擊

PHP安全-會話固定

小提示

我不推薦在每一頁上重新生成會話標識。雖然這看起來確實是一個安全的方法。但與在權限等級變化時重新生成會話標識相比,并沒有提供更多的保護手段。更重要的是,相反地它還會對你的合法用戶產生影響,特別是會話標識通過URL傳遞時尤甚。用戶可能會使用瀏覽器的訪問歷史機制去訪問以前訪問的頁面,這樣該頁上的鏈接就會指向一個不再存在的會話標識。

如果你只在權限等級變化時重新生成會話標識,同樣的情況也有可以發生,但是用戶在訪問權限變更前的頁面時,不會因為會話丟失而奇怪,同時,這種情況也不常見。

標簽: PHP
相關文章:
主站蜘蛛池模板: 国产视频三级 | 欧美一级视频在线观看欧美 | 久久久久琪琪去精品色村长 | 欧美一级成人毛片影院 | 女女同性一区二区三区四区 | 亚洲成年人免费网站 | 99国产精品视频久久久久 | 黄色美女毛片 | 六月丁香婷婷天天在线 | a级毛片免费在线观看 | 免费一级片视频 | 欧洲成人r片在线观看 | 精品国产免费第一区二区 | 成人a一级毛片免费看 | 亚洲午夜在线观看 | 男人添女人下面免费毛片 | 毛片免费大全 | 久久久国产精品免费看 | 日韩欧美在线视频观看 | 99re6这里有精品热视频在线 | 欧美一级毛片无遮无挡 | 精品欧美成人高清视频在线观看 | 亚洲欧美一级视频 | 欧美一级爆毛片 | 怡红院免费的全部视频国产a | 久久久久无码国产精品一区 | 狠狠综合久久 | 国内9l视频自拍 | 久久91精品国产一区二区 | 欧美在线成人午夜网站 | 欧美黄色特级视频 | 黄.www | 免费一级毛片无毒不卡 | 久草福利资源 | 国产欧美视频综合二区 | 她也啪在线视频精品网站 | 美国一级毛片∞ | 国产乱码一区二区三区四川人 | 国产福利微拍精品一区二区 | 美女视频黄a视频免费全程 美女视频黄a视频免费全过程 | 国产精品久久久久久影视 |