2012-04-25 49 views
1

我遇到過幾個關於通過LDAP Active Directory服務器將用戶認證集成到公司網站的問題。該網站主要用於內部安全訪問文件/ PDF。該網站可在我們的網絡外部訪問,因爲某些客戶還需要能夠查看/上傳文件以進行訂單和驗證。我們確實有一個SSL證書,用於安全訪問該網站,適用於內部和外部。PHP用戶認證和安全方法:LDAP-AD和SQL Server

目前,該站點使用PHPass進行密碼處理,同時將用戶信息存儲在MS SQL Server數據庫中。需要訪問該網站的用戶將被添加到此數據庫中,並註冊帳戶級別並處理密碼方面的問題。此方法非常安全,對於當前使用情況(內部員工,爲外部客戶分離的數據)工作良好。但是它也引入了整個系統的更多故障點。 IE:用戶需要記住(或忘記)的其他密碼以及管理員額外的帳戶管理開銷。

在計劃簡化網站身份驗證時,我負責整合Active Directory用戶信息以便用於登錄。這對我們公司的員工會很好,因爲他們已經有一個AD帳戶。但是,不會爲供外部供應商或客戶使用,因爲他們沒有AD帳戶(也不應該)進行身份驗證。

這使我相信最簡單的解決方案是有一個「主要」形式的身份驗證(針對AD)和對已經創建的SQL用戶數據庫的回退。像AD一樣回來的用戶使用這些憑證,或者搜索用戶的SQL DB(其中包含我們需要的任何非AD帳戶)。

問題:

  • 是覈查上述方法的邏輯和安全的計劃? 如果不是,我該怎麼做呢?
  • 如何防範LDAP攻擊/蠻力?
    • 在PHP/SQL,利用參數/類型轉換查詢,帳戶鎖定/超時,一般錯誤信息,正確的密碼哈希方法,等等 - 增加了用於固定的數據庫和強制登錄嘗試
    • 有關的ldap_bind,用戶名和密碼是通過網絡發送到LDAP服務器的清晰?
  • 由於此登錄對於整個網絡,我怎麼能保證我的登錄/網站是不是安全的最薄弱的環節,或造成不應有的四通八達的交通網絡密碼信息?

注意:這是張貼在StackOverflow上,而不是ServerFault,因爲我的問題是編程PHP網站的安全性。我的問題首先涉及用戶登錄網站的訪問權限,限制和權限問題,同時向AD或備份數據庫進行身份驗證。

回答

0

目前他們沒有LDAP帳戶並不是製作雙層應用程序的原因。這不僅是脆弱性的兩倍 - 因爲通過實施自己的身份驗證後端,您還需要實現所有與之相關的用戶管理員。只需爲外部用戶添加帳戶,但不允許他們訪問任何工作站。

+0

我接受你的答案,即使它不*技術*回答這個問題。具有兩個用戶數據庫的額外管理開銷和故障點/攻擊媒介並不理想。我已經將外部帳戶添加到了AD,並且使用了非常鎖定的GP,該GP也拒絕了本地登錄和其他不需要的網絡訪問。 – PenguinCoder 2012-05-08 15:10:37

0

如果您看看Drupal,LDAP身份驗證模塊的功能幾乎相同:如果無法爲用戶(即您的承包商)找到Drupal帳戶,它將轉至LDAP並嘗試向其進行身份驗證。在LDAP的情況下,它不會將密碼存儲在自己的數據庫中。所以,是的,你的計劃已經完成,似乎或多或少被接受。我曾經創建過一個使用drupal登錄的drupal模塊,如果CAS系統不在線,那麼它就是一個帶有LDAP後備的CAS系統。

通過域級白名單來防止強制使用LDAP服務器。我在一所使用LDAP服務器的大學工作,其中一些信息處於公有領域,而另一些信息則隱藏起來以便遵守各種聯邦法律。某些信息只能通過來自大學網絡的請求訪問,同時綁定到服務器的帳戶具有足夠的權限訪問信息(即電子郵件,未列出的地址等)。只要你的密碼很好,並定期更換,應該沒問題。你總是可以限制使用LDAP來驗證某些服務,並使你的網站或LDAP服務器(我不知道它是否可以像這樣配置......但是誰知道呢?也許可能)跟蹤失敗的次數嘗試登錄並使該人在5次失敗嘗試後等待5分鐘。

當與服務器進行通信時,應該使用ldaps來避免傳輸。除非你使用Zend服務器進行MAC,否則這種方式效果很好(它的特定版本的PHP不喜歡ldaps並會掛起服務器),並且會阻止人們嗅探你的流量並使你的網站成爲最薄弱的環節。此外,絕對不要在用戶的網站上存儲用戶的密碼,並確保在登錄頁面上使用https。