我們有一個 Web 應用程式 (Apache/PHP),目前使用使用者名稱/密碼驗證,並且目前可以從任何地方存取。它啟用了伺服器端 SSL。
我們的客戶端程式是我們修改並重新命名的 FireFox 版本。這個修改過的 Firefox 用戶端僅用於連接到我們的 Web 應用程式伺服器。使用者必須使用此用戶端程式連線到 Web 服務。
除了用戶身份驗證之外,我們還希望阻止任何不使用我們的客戶端程式*的人在伺服器層級進行存取。因此,如果使用者使用常規瀏覽器輸入 URI,他們將被徹底拒絕。
為了實現這一點,客戶端程式需要向伺服器表明自己的身份,以便伺服器知道正在使用我們的客戶端程序,而不是網頁瀏覽器或機器人。
*真正的目標是確保他們在嘗試登入之前是我們公司的授權員工,將這個「就業證明」嵌入到客戶端程式中似乎是做到這一點的最簡單方法,因為應用程式是只提供給有需要的人使用..
到目前為止,我已經有了一些關於如何實現這一目標的想法。
1.) 將令牌嵌入到客戶端應用程式中,該令牌在客戶端登入時發送(登入由 chrome/XUL 介面處理)。這不會在伺服器層級阻塞,只會在應用程式層級阻塞。密鑰可以像密碼一樣容易被竊取,但不會那麼容易透過暴力破解,因為它可以是任何長度或複雜性。
1a.) 在所有請求的用戶端瀏覽器標頭中新增特殊的 tolken 參數。這更像是透過默默無聞的安全性,但如果請求中缺少魔術字串時登入總是失敗(即使使用正確的密碼),那麼肯定會減慢攻擊者嘗試暴力破解密碼的速度。
2.) 將客戶端 SSL 憑證嵌入到客戶端程式中。這看起來可能是一個很好的解決方案,但是關於客戶端 SSL 的良好文件幾乎不存在。我們不想為每個使用者簽署證書,也不希望使用者必須建立證書或根本不為安全對話所困擾。私鑰必須嵌入到瀏覽器中,並且是所有客戶端程式之間共享的金鑰,並在我們的自訂瀏覽器中按安裝分發。
3.) 檢查用戶代理字串。我認為Apache可以基於此進行限制。但這似乎充其量只是一個薄弱的措施。除了其他措施之外,我可能還會這樣做。
我希望對如何做到這一點有更好的想法?
答案1
在修改後的瀏覽器中包含客戶端 SSL 憑證將是最簡單的,也可能更安全。
如果您對每個人使用相同的金鑰,您將失去客戶端憑證的許多優點,但它比檢查使用者代理更好。我假設您仍然需要用戶名和密碼才能登入。
答案2
您有考慮過VPN嗎?這聽起來正是您真正想要的。