2012-02-24 56 views
2

我想包括在網站安全登錄,並給出的威脅模型,我想知道如果我可以放心地回落到這樣一個更快的平原連接:

  1. 通過安全連接,談判隨機令牌T。這存儲在一個cookie中。
  2. 服務器商店f(T)=hash(private_salt,T,username,password,$_SERVER['REMOTE_ADDR'])
  3. T稍後在未加密的連接上共享。服務器重新計算f(T)以驗證連接。

這個想法是T代表沒有特定的信息,即使它被盜,來自不同始發IP地址的連接也會導致計算不同的f(T)

明顯的弱點是會話在NAT後面被盜用。假設我們可以在實踐中解決這個問題。這個問題基本上歸結爲:欺騙連接有多容易,保留$_SERVER['REMOTE_ADDR']

此網站只需要適度的安全。不會有敏感的流量。 威脅模型基本上是爲了應對破壞行爲。我只需要阻止無聊的人,而不是俄羅斯黑手黨。鑑於這個假設,上述協議是否足夠安全?

另外,讓我們假設這發生在一個普通的網絡瀏覽器和LAMP - 爲了安全的密碼傳輸,是https城裏唯一的遊戲?似乎Diffie-Hellman密鑰交換或類似的就足夠了(模擬服務器不在威脅模型中),並且不需要所有簽名警報。有大多數瀏覽器支持的標準apache/php模塊嗎?

回答

1

壞主意。

我曾經是一個擁有多個IP地址的大型網絡。我做的每個請求都由負載均衡器分配給其中一個IP地址。實際上,這意味着我的IP地址在兩個連續的請求中很少相同。每次加載頁面時,我都會從系統中註銷。

您可以嘗試使用$_SERVER['HTTP_USER_AGENT'],因爲這需要cookie竊賊具有完全相同的瀏覽器或(假設威脅模型允許足夠熟練的破壞者)僞造完全相同的UA字符串。也就是說,如果你不告訴任何人你檢查UA字符串,那麼對於那些技術嫺熟的黑客來計算你的服務器拒絕關於「完美」會話cookie的問題可能會感到困惑。

+1

這是一個「大型網絡」某種特殊的企業內部設置?還是在家裏的用戶常見的做法? – spraff 2012-02-24 17:21:39

+0

我當時在大學。然而,問題依然存在,即任何擁有動態IP的人(即大多數人)在登錄時都會遇到問題。 – 2012-02-24 17:24:10

+0

如果您的客戶端是移動設備,該怎麼辦?說一臺筆記本電腦或手機。然後你會遇到同樣的問題。 – diedthreetimes 2012-02-25 06:35:06

0

似乎這不會工作,如果:有人竊取登錄的用戶的IP和cookie,或有人知道用戶acc /密碼。 ...我不明白這將如何應付任何類型的破壞行爲雖然(除了可能cookie的bruteforce /猜測攻擊):/

也每次連接的IP變化,他將需要重新登錄..

+0

這個問題可以簡潔地表述爲「竊取知識產權有多難?」?青少年可以在另一個大陸上做些什麼,還是需要先攻擊ISP?這是一個最薄弱環節的問題,如果他們不得不破解一箇中間層,那麼這是不值得的。 – spraff 2012-02-24 17:20:18

0

與網站的交互使用HTTP,通過TCP運行。 TCP連接是持久的,每次連接設置開始時發生的三次握手都會確保我不會去騙我的IP地址(因爲握手中的第二步是從服務器發送到指定的IP地址客戶端,所以除非你可以妥協路由表或者做一些其他非常花哨的事(非常困難),否則連接無法建立)。

因此,特別是基於您正在使用的威脅模型,不要處理IP地址欺騙;對於TCP連接,在實踐中很難實現這一點。由於客戶端可以更改IP地址(ISP發佈的動態IP,負載平衡代理服務器,NAT/PAT等),因此您更有可能錯誤地拒絕好用戶,而不是正確拒絕使用此方法的用戶。生成一個良好的會話ID,將其存儲在cookie中,並根據每個請求進行檢查。