簡體   English   中英

會話劫持在 PHP 中究竟是如何工作的?

[英]How exactly does session hijacking work in PHP?

我做了一個有注冊/登錄的網站。 我可以在 Chrome 的開發人員工具中看到 PHPSESSID cookie,所以我想知道如何使用這個會話 ID 值劫持我登錄的帳戶,為了簡單起見,讓我們說一個不同的瀏覽器?

一個安全的網站是否應該能夠確定這個會話被劫持並阻止它?

另外,為什么其他使用 PHP 的大網站(例如 Facebook)沒有 PHPSESSID cookie? 他們是給它一個不同的名字來表示晦澀難懂,還是他們只是使用完全不同的機制?

很多好問題,感謝你提出這些問題。

首先.. 會話只是一個cookie。 “會話”不是 HTTP 堆棧的一部分。 PHP 恰好提供了一些便利,使使用 cookie 變得容易,從而引入了會話。 PHP 選擇 PHPSESSID 作為 cookie 的默認名稱,但您可以選擇任何您想要的名稱。即使在 PHP 中,您也可以更改 session_name。

攻擊者所要做的就是獲取您正在查看的會話 cookie,並在其自己的瀏覽器中使用它。 攻擊者可以使用自動腳本或例如使用螢火蟲來做到這一點,您可以只更改當前的 cookie 值。

所以是的,如果我有你的 id.. 如果你不采取任何措施來阻止它,我可以竊取你的會話。

然而……對於攻擊者來說最困難的部分是首先獲得cookie。 攻擊者不能真正做到這一點,除非:

  • 他們可以訪問您的計算機
  • 他們以某種方式能夠窺探您的網絡流量。

第一部分很難解決。您可以使用一些技巧來識別啟動會話的計算機(檢查用戶代理是否更改,檢查 ip 地址是否更改),但沒有防水或不是很好的解決方案。

您可以通過確保所有流量都使用 HTTPS 加密來解決第二個問題。 沒有理由不使用 HTTPS。 如果您的網站上有“登錄”區域,請務必使用 SSL!!

我希望這能回答你的問題。我現在想到的其他一些建議:

  • 每當用戶登錄時,給他們一個新的會話 ID
  • 每當用戶注銷時,也給他們一個新的會話 ID!
  • 確保瀏覽器在任何情況下都無法確定會話 cookie 的值。 如果您不認識該 cookie,請重新生成一個新的 cookie!

如果您使用相同的 IP 並使用相同的瀏覽器,那么您所要做的就是復制會話 ID(可能還有其他 cookie 值:不確定是否跟蹤/比較了瀏覽器特定的東西,比如它的代理字符串;這是實現依賴)。

一般來說,有不同的方法來跟蹤用戶(最終它只是用戶跟蹤)。 例如,您可以在網頁中使用 cookie 或某些隱藏值。 您也可以在 HTTP GET 請求、Flash cookie 或其他一些身份驗證方法(或這些方法的組合)中使用一個值。

在 Facebook 的情況下,他們使用多個 cookie 值,所以我假設他們使用這些值之一(例如“xs”)。

總的來說,沒有真正 100% 安全的方法來做到這一點(例如,由於中間人攻擊),但總的來說,我會做以下事情:

  • 登錄后,存儲用戶的 IP 地址、他的瀏覽器代理字符串和唯一令牌(根據上面的評論進行編輯:您也可以跳過他的 IP 地址;使整個事情變得不那么安全)。
  • 客戶端存儲用戶的唯一 ID(例如用戶 ID)和該令牌(在 cookie 或 GET 值中)。
  • 只要第一步存儲的數據匹配,就是同一個用戶。 要注銷,只需從數據庫中刪除令牌即可。

哦,順便提一下:所有這些都不是特定於 PHP 的。 它們可以使用任何服務器端語言(Perl、PHP、Ruby、C#...)或一般的服務器來完成。

有人嗅探會話 ID cookie 並將其設置為后續請求。 如果這是對用戶進行身份驗證的唯一方式,那么他們就已經登錄了。

大多數站點都會以某種形式使用基於 cookie 的身份驗證。 有幾種方法可以使其更加安全,例如在用戶登錄時存儲有關用戶瀏覽器的信息(例如用戶代理、IP 地址)。 如果其他人天真地試圖復制 cookie,它就不會起作用。 (當然,也有解決此問題的方法。)您還會看到會話 cookie 會定期重新生成,以確保它們在特別長的時間內無效。

查看Firesheep ,了解執行會話劫持的 Firefox 擴展。 我不是建議您使用它,但您可能會發現該頁面上的討論很有趣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM