程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP基礎知識 >> php Session劫持漏洞防護

php Session劫持漏洞防護

編輯:PHP基礎知識
 

服務端和客戶端之間是通過session(會話)來連接溝通。當客戶端的浏覽器連接到服務器後,服務器就會建立一個該用戶的session。每個用戶的session都是獨立的,並且由服務器來維護。每個用戶的session是由一個獨特的字符串來識別,成為session id。用戶發出請求時,所發送的http表頭內包含session id 的值。服務器使用http表頭內的session id來識別時哪個用戶提交的請求。

session保存的是每個用戶的個人數據,一般的web應用程序會使用session來保存通過驗證的用戶賬號和密碼。在轉換不同的網頁時,如果需要驗證用戶身份,就是用session內所保存的賬號和密碼來比較。session的生命周期從用戶連上服務器後開始,在用戶關掉浏覽器或是注銷時用戶session_destroy函數刪除session數據時結束。如果用戶在20分鐘內沒有使用計算機的動作,session也會自動結束。

php處理session的應用架構

會話劫持

會話劫持是指攻擊者利用各種手段來獲取目標用戶的session id。一旦獲取到session id,那麼攻擊者可以利用目標用戶的身份來登錄網站,獲取目標用戶的操作權限。

攻擊者獲取目標用戶session id的方法:

1)暴力破解:嘗試各種session id,直到破解為止。

2)計算:如果session id使用非隨機的方式產生,那麼就有可能計算出來

3)竊取:使用網絡截獲,xss攻擊等方法獲得

 

會話劫持的攻擊步驟

 

實例

//login.php

<?php
session_start();
if (isset($_POST["login"]))
{
$link = mysql_connect(“localhost”, “root”, “root”)
or die(“無法建立MySQL數據庫連接:” . mysql_error());
mysql_select_db(“cms”) or die(“無法選擇MySQL數據庫”);

if  (!get_magic_quotes_gpc())
{
$query = “select * from member where username=’” . addslashes($_POST["username"]) .
“’ and password=’” . addslashes($_POST["password"]) . “’”;
}
else
{
$query = “select * from member where username=’” . $_POST["username"] .
“’ and password=’” . $_POST["password"] . “’”;
}

$result = mysql_query($query)
or die(“執行MySQL查詢語句失敗:” . mysql_error());
$match_count = mysql_num_rows($result);
if ($match_count)
{
$_SESSION["username"] = $_POST["username"];
$_SESSION["password"] = $_POST["password"];
$_SESSION["book"] = 1;
mysql_free_result($result);
mysql_close($link);
header(“Location: http://localhost/index.php?user=” .
$_POST["username"]);
}

…..

   

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved