性能測試基本知識之Session的本質(4)

發表于:2012-11-19來源:IT博客大學習作者:360weboy點擊數: 標簽:session
你可能會說,居然攻擊者能獲得有效的session id,那么以他的水平,偽造一個相同的User-Agent不是件難事。不錯,但是我們可以說這至少給他添加了一些麻煩,

  你可能會說,居然攻擊者能獲得有效的session id,那么以他的水平,偽造一個相同的User-Agent不是件難事。不錯,但是我們可以說這至少給他添加了一些麻煩,在一定程度上也增加了session機制的安全性。

  你應該也能想到了,既然我們可以檢查User-Agent這個頭部來加強安全性,那么不妨再利用其它的一些頭部信息,把他們組合起來生成一個加密的 token,并且讓客戶端在后續的請求中攜帶這個token!這樣的話,攻擊者基本上不可能猜測出這樣一個token是怎么生成出來的。這好比你用信用卡在超市付款,一個你必須有信用卡(好比session id),另外你也必須輸入一個支付密碼(好比token),這有這兩者都符合的情況下,你才能成功進入賬號付款。 看下面一段代碼:

  

  session_start();

  $token = 'SHIFLETT' . $_SERVER['HTTP_USER_AGENT'];

  $_SESSION['token'] = md5($token . session_id());

  ?>

  注意:Accept這個頭部不應該被用來生成token,因為有些瀏覽器會自動改變這個頭部,當用戶刷新瀏覽器的時候。

  在你的驗證機制中加入了這個非常難于猜測出來的token以后,安全性會得到很大的提升。假如這個token通過像session id一樣的方式來進行傳遞,這種情況下,一個攻擊者必須完成必要的3步來劫持用戶的session:

  獲取一個合法的session ID

  在請求中加入相同的User-Agent頭部,用與生成token

  在請求中攜帶被攻擊者的token

  這里面有個問題。如果session id以及token都是通過GET數據來傳遞的話,那么對于能獲取session ID的攻擊者,同樣就能夠獲取到這個token。所以,比較安全靠譜的方式應該是利用兩種不同的數據傳遞方式來分別傳遞session id以及token。例如,通過cookie來傳遞session id,然后通過GET數據來傳遞token。因此,假如攻擊者通過某種手段獲得了這個唯一的用戶身份標識,也是不太可能同時輕松地獲取到這個token,它相對來說依然是安全的。

  還有很多的技術手段可以用來加強你的session機制的安全性。希望你在大致了解 session的內部本質以后,可以設計出適合你的應用系統的驗證機制,從而大大的提高系統的安全性。畢竟,你是最熟悉當下你開發的系統的開發者之一,可以根據實際情況來實施一些特有的,額外的安全措施。

  總結

  以上只是大概地描述了session的工作機制,以及簡單地闡述了一些安全措施。但要記住,以上的方法都是能夠加強安全性,不是說能夠完全保護你的系統,希望讀者自己再去調研相關內容。在這個調研過程中,相信你會學到很有實際使用價值的方案。

  后續有時間,我會分別撰寫關于session固定攻擊,session劫持的文章以及分享保存session在數據庫中的一個工具類。以及闡述下真個php session的啟動session的內部過程。

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97