2010-12-14 106 views
3

我爲CodeIgniter構建了一個自定義驗證系統(我知道有各種第三方庫可用,但這是爲了我自己的利益),但我擔心我錯過了明顯的可能會帶來整件事情都下降了CodeIgniter驗證安全模型

我使用CI會話(通過數據庫)並加密cookie值,可能會導致一些可能毫無意義的混淆。登錄通過SSL進行(並且Cookie被修改爲僅安全)。我也使用phpass來存儲密碼,雖然這在這裏沒有真正的相關性。這部分某處可能存在薄弱環節,但我主要擔心的是頁面到頁面檢查基本上包含if is_logged_in = true類型的方法以及他們在會話中的用戶名。這一點讓我擔心,因爲它看起來有點太「容易」。這種方法很脆弱嗎?我是否應該計算一個由用戶代理或其他方式構成的逐頁散列,並確保它們匹配?

任何指針將不勝感激。就像我說的,我知道現有的解決方案,但我試圖在這裏學習一些學習:)

回答

3

你提到的一切都很好。但是我不熟悉phpass。確保當你散列密碼時,你使用的是鹽。

由於會話數據存儲在服務器端,因此檢查是足夠的。檢查諸如用戶代理之類的事情的原因是爲了防止會話劫持,即一個人獲得另一個人的會話ID。

+0

+1用於醃製密碼 – 2010-12-14 20:06:40

+0

phpass用salt然後用bcrypt哈希。會話劫持是一個很好的觀點。我知道CI在會話數據庫中跟蹤用戶代理,但我不太確定它是如何處理的。值得檢查! – Toast 2010-12-14 20:32:00

2

PS:我不是安全專家,所以我更喜歡使用的系統由安全專家檢查:OpenID的,Facebook的連接,微博(OAuth的),谷歌登入等

但這裏是我的清單(我可以認爲):

  • 使用SSL,以確保沒有人可以通過電線發送讀取您的密碼。
  • 你應該sanitize所有你的輸入($ _ POST,$ _GET,$ _SERVER等)。如果不是局部變量,你應該小心。因此,例如,您應該使用此過濾器來消毒$_SESSION['is_logged_in'] =>$var = filter_var($_SESSION['is_logged_in'], FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE);AGAIN您應該對來自服務器的所有輸入執行此操作,因爲它們不安全。最好的方法是使用白名單而不是黑名單。因爲有機會你會錯過什麼。
  • 使用PDO可以最大限度地降低sql注入的風險。
  • 請勿將密碼以純文本形式存儲在您的數據庫中,但它們必須是hash。我猜想仍然有風險。因爲最近gawker/lifehacker已被comprimised(想知道它會如何發生?)。我想你的phpass是相當穩固的,因爲owasp也推薦它。
  • 注意XSS攻擊。由於消毒輸入已經完成
  • 針對CSRF採取措施。如果您可以在用戶登錄時修改電子郵件地址,那麼這也非常危險。下一步是發送一封電子郵件來重置您的密碼,並且您的系統已被壓縮。
+0

這是很好的建議。我只想指出,Codeigniter已經通過使用內置的$ this-> input-> post對象,activerecord來消毒輸入,以最大限度地減少sql注入並且內置了XSS過濾器(我不確定它是否默認打開)。 – rrrhys 2010-12-16 04:48:15

+0

你是對的。我過去使用過codeigniter(當我仍然頻繁使用php開發時)。但我不認爲codeigniter有CSRF保護內建呢? – Alfred 2010-12-16 08:11:08