2012-02-06 158 views
2

我在打開我的網站的最後一步,但唯一讓我瘋狂的是php用戶管理。我發現了構建這些系統的大量資源,我相信我可以用自己的方式編寫它們。問題是,當談到安全問題時,我非常害怕發生什麼事情。例如,當涉及通過SSL發送敏感信息時,一些人建議確保信息在註冊表單中加密,以便攻擊者無法破解它。還有一些其他建議要確保調試信息不​​會在錯誤發生時顯示,以便攻擊者無法回溯鏈接等。php用戶管理系統

現在,我從這裏和那裏讀取的MD5是不安全的,所以我想知道如何哈希新的用戶密碼等......我找到了一些已經提供了一些用戶管理的程序員的鏈接,但沒有確定它們是否足夠好,因爲我關心安全作爲優先事項CodeCanyon

那麼現在我需要關注哪些安全措施? 有沒有與此相關的任何資源?

謝謝,

回答

4

你不必(不應該)(你不應該)在人們告訴你實現的不同事物之間進行選擇。良好的安全性始終是分層的,這意味着您可以儘可能多地實施保護。這種方法有多種用途。每層可以防止不同的攻擊。每層可以防止具有不同體驗的攻擊者。每層可以增加攻擊者所需的時間。

以下是對驗證系統有用的一些tipps。

  • 不顯示調試輸出
  • 不要使用MD5哈希值。存儲密碼在窗體上
  • 使用隨機數(一次性令牌)
  • 始終要求服務器和客戶端之間的SSL加密時SHA2甚至更好,bcrypt好得多
  • 使用鹽
  • 當對訪問數據庫服務器,確保信息泄露或其客戶端操作不可能(例如, 避免注入攻擊,數據庫驅動程序使用準備好的 語句等)
  • 確保所有失敗的登錄(無論是什麼原因)防止時間攻擊的時間相同
  • 當登錄的用戶開始有風險的操作(改變PWD,支付等),重新authgenticate他
  • 切勿將密碼明文,而不是以往任何時候都沒有在任何地方
  • 需要最低限度的複雜的密碼
  • !!!保護你的php會話(另一大主題,值得自己討論) -

正如你所看到的,你可以做很多事情(更多的人可能會告訴你更多的東西),你應該做什麼取決於你願意接受的風險。但永遠不要依賴單一的安全措施,總是有一個分層的方法。

+0

非常感謝** ultimA **的迴應。我可以看到你列出了所有可能引起關注的問題。我相信我必須不斷尋找所有這些問題的解決方案。再次感謝。 「 – 2012-02-06 12:36:16

+1

」列出了所有可能的問題「 - 謝謝,但名單遠遠沒有完成。這些僅僅是一些例子,還有其他一些與安全有關的事情,比如登錄限制,確保使用一個好的隨機源驗證腳本的所有輸入(參數和用戶輸入),使用瀏覽器功能(HSTS,x-frame-選項等)以及可能還有一些其他東西,這些東西或者不在我的腦海裏,或者我甚至不知道。 – ultimA 2012-02-07 21:13:18

1

使用SHA1,用於存儲口令,防止SQL注入和XSS腳本作爲輸入字段。 會話劫持,注視預防。

+0

感謝您的評論,但正如ultimA所提到的,這是一個非常漫長的方式來保證事情安全。 – 2012-02-06 13:10:41

+0

只是一個快速的問題隊友,是否有一個完整和安全的系統被稱爲非常好,它不是免費的! – 2012-02-06 14:20:05

+0

謝謝。我想最好是使用b-crypt,因爲它更好,更安全。歡呼聲 – 2012-02-07 02:38:15

2

回答你的直接問題:已經證明,MD5確實有碰撞,並且有彩虹桌漂浮在附近(見Wikipedia)。 PHP確實有一些散列函數available都具有不同的優點和缺點。另請參閱php.net上的評論部分。

關於一般Web應用程序的安全性,我建議你看看OWASP project,這是關於使Web應用程序更安全。一個好的開始將是看看Top Ten security vunerabilities(藍色框中的「前十名」)。

+0

感謝您的評論。非常真實的是,隨着科技變得越來越複雜,更好,MD5不再好。 順便說一句,感謝您提供關於OWASP的提示。這是偉大的系統。 – 2012-02-06 12:46:55

+0

順便說一句,我發現一個免費的用戶管理軟件[majordojo](http://www.majordojo.com/php-users/)它不是一個壞的。 – 2012-02-06 13:09:10

1

起初,您應該通過SSL(TSL)將數據發送到服務器,這將進行加密。你也應該爲發送給服務器的任何表單使用CSRF保護。

當你已經實現你的功能,他們的工作,你應該嘗試自己破解你的網站。嘗試通過表單注入SQL,JS,嘗試在表單發送後操縱日期,還可以嘗試生成將寫入您的PHP錯誤日誌,即使在您的服務器設置較弱時也可以執行。 (http://en.wikipedia.org/wiki/Hardening_(computing))

當您在數據庫中存儲密碼時,使用種子散列函數,如果任何人能夠破解您的數據庫並獲取散列,他將無法在沒有種子的情況下加密它們。

您將通過谷歌找到關於所有技術的許多信息。

+0

@ tbaun89非常感謝您的好評。你是完全正確的,我相信測試執行的好壞非常重要,所以我可以檢查它的強弱程度。 – 2012-02-06 12:38:20