2013-03-16 92 views
2

會話劫持我如何在PHP保護會話閱讀的有效途徑,也有少數,但他們不那麼有效,如添加到會話用戶代理,IP和端口和加密他們。 什麼是防止會話劫持的好方法? 我認爲採取以下步驟:保護在PHP

  1. 更改PHPSESSID關鍵乾脆通用的東西像ID
  2. 生成每頁的令牌,並把它放在網頁上,然後對其進行驗證,以及德會議。這將減少我僅依靠會議進行驗證。
  3. 我會添加一個短會話到期。
  4. 添加更多變數會話ID和加密,所以這將是更長,更難破解。也許我會使用RSA加密。
  5. 放置一個註銷按鈕,以便用戶能夠終止他的會話。
  6. 使用javascript計算時間,超過5分鐘將提醒用戶繼續他的會話。
  7. 僅在Cookie中保存會話。

我聽到的困難是:當您每頁使用令牌時,您需要禁用後退按鈕?這是爲什麼?

一些其他的東西也不清楚?在數據庫中保存會話更安全嗎?爲什麼? 使用SSL有多安全?如何快速重新生成會話ID,它會有幫助嗎?

什麼系統將防止暴力破解的加密密鑰(將確定誰試圖與充斥大量嘗試猜測會話ID將幫助服務器的用戶的IP?)?

如何會話再生工作,是自動銷燬舊的會話密鑰,如果黑客獲得一個老的會話密鑰將它仍然工作是什麼?請,對我來說理解會話安全非常重要,因爲我正在學習如何成爲一名滲透測試人員?

UPDATE 我認爲要做到這一點: 對稱加密與一個隨機生成的令牌密鑰A 對稱加密的會話ID,這將是在後場與關鍵

隨機生成的令牌也會被附加到會話ID,然後進行加密。

等待,我應該得到這些變量: $ _SESSION [ 'PHPSESSID'](已隨機生成的令牌是加密的) $ _ POST [ 'RandomlyGeneratedToken']

與密鑰A解密會話ID和使用密鑰B對隨機令牌解密。 做2次檢查: - 如果令牌與發送的第一個請求上的令牌相同,則檢查該令牌。 - 檢查令牌是否存在於sessionid中。

可能性爲黑客: -Bruteforce會話ID。 我的會話ID足夠長,需要他時間。我可以使用一個系統來檢測來自同一個IP地址的大量請求,並使用不同的會話ID,並通過休眠功能減慢它的速度。

- 竊聽流量並從用戶以及令牌獲取會話ID,並嘗試提交這些令牌。 嗯...我將不得不重新生成每個請求的會話ID,並在某些頁面上快速過期會話..可能是1分鐘.. 但他能多快地竊聽?

+0

夢Eater..nice看看如何ü要關閉thread..u一無所知..所以你投票結束..血腥無知 – BlackFire27 2013-03-16 09:17:51

回答

5

「完全改變PHPSESSID關鍵的東西像通用ID」

這是通過模糊的安全,並在此上弱。用戶只需要查看他們的cookie並放在一起用於會話ID就可以繞過這個

「每頁生成一個令牌並放在頁面上,然後驗證它以及會話。」

這是一個有趣的想法。但如果用戶打開了多個頁面呢?你能支持多個令牌嗎?令牌何時過期?

「我會添加一個短會話到期。」

好主意,但這樣可能會影響誰留在網頁上的用戶很長一段時間,然後只命中刷新發現,他們已註銷太快

「添加更多變數會話ID和加密,所以它會更長,更難破解,也許我會使用RSA加密。「

爲什麼使用RSA加密?爲什麼不用SHA之類的單向散列呢?不要忘記添加鹽或初始化媒介

「放一個註銷按鈕,以便用戶能夠終止他的會話。」

誰曾經點擊註銷按鈕? ;-)

「使用javascript計算時間,超過5分鐘將提醒用戶繼續他的會話。」

「將會話保存在cookie中」。

不這樣做,總是保存數據服務器端。 Cookie可以被操縱,因爲它們存儲在客戶端

至於你的其他意見:你可以將你的會話變量存儲在數據庫中,這可以讓你檢查其他東西,如IP地址等(雖然你可以檢查IP等自定義會話處理功能:http://php.net/manual/en/session.customhandler.php)。但是,如果您使用數據庫並且過於頻繁地重新生成會話ID(例如每次頁面加載時),都會發現如果用戶快速點擊刷新按鈕,則該ID將重新生成得比您的服務器在數據庫中更新它的速度更快會話將會丟失。

「怎麼會再生工作,是自動銷燬舊的會話密鑰」

是,除非你編寫自定義代碼,然後就看你的自定義代碼

我希望我的答案是有點用處,但我推薦以下爲OWASP會話管理的指導方針,以便您遵循最佳做法: https://www.owasp.org/index.php/Session_Management_Cheat_Sheet

編輯

即時通訊不知道你的意思是什麼?你的意思是在會話ID中使用token嗎?這將提供什麼價值? 您的令牌是會話變量嗎?這是沒有意義的,因爲它的價值是存儲在服務器端的關鍵是哪個phpsessid的濫用,你試圖阻止。

另外 - 永遠不要指望黑客的能力不理解你的邏輯。如果他們想了解它,他們會。

最後,爲什麼你需要這麼多的安全性(不要爲此而投票)?有這麼一個好的安全性(如果你遵循某些標準)。你可能不需要保護外國政府黑客,否則你可能會外包這個項目。請遵循易於使用的教​​程或指南(如上面提供的OWASP)中列出的最佳做法。這將是足夠:-)

編輯 「還有,你說的最佳存儲是數據庫?關於我反對野蠻描述的最後一種方法迫使什麼」

數據庫會話存儲不一定最佳。您在需要時使用它,例如在負載均衡需要共享會話數據的多個Web服務器時。

兩種方式來阻礙蠻力攻擊是1)有一個很長的會話ID,和2)重新生成頻繁

+0

我讀了那張紙和其他一些文章。你能擴展令牌每頁位嗎?什麼是每個頁面生成一個令牌的問題,將它嵌入到會話和頁面中(以便兩者之間會有綁定),也許使用不同的散列方式可能使用對稱加密,並且在服務器端驗證它們服務器 - 黑客甚至不會理解它背後的邏輯,即使看到我的所有cookie,並可以操縱我的帖子字段。另外,你說最佳的存儲是數據庫?我說的最後一種方法,我反對蠻力強迫 – BlackFire27 2013-03-16 08:02:16

+0

看到附加答案 – Tucker 2013-03-16 08:23:12

+0

我的意思是使用一個令牌,將其附加到會話ID和隱藏字段。爲每個使用對稱加密。使用只能解密會話標識的密鑰對會話標識進行加密,並使用帶有標記的不同加密密鑰進入表單。根據請求,應該使用一個密鑰解密會話ID,並使用不同的密鑰解密令牌作爲後置變量。然後檢查帖子標記字段,如果會話ID不包含,則中止請求。另外SSL的安全性,我的意思是它加密一切再加上公鑰對某些CA權威機構進行驗證 – BlackFire27 2013-03-16 09:14:49