2014-01-20 82 views
1

我正在爲我家寫一個小型網絡服務器,用幾個java API來玩,我想知道更多。該Web服務器最終將保存個​​人文件和圖片。在java代碼中檢查密碼(安全方面的問題)

我不想設置LDAP服務器進行身份驗證,並想知道如果我只是直接用java代碼檢查它會有多糟糕?

+0

主要的安全問題是通過互聯網發送明文密碼。 http://stackoverflow.com/questions/1582894/how-to-send-password-securely-over-http – NeplatnyUdaj

+0

@NeplatnyUdaj確實。部署網絡服務時需要考慮很多事情,特別是未經測試的用戶羣(在這種情況下爲1人)。除了傳輸安全性(使用HTTPS)之外,安全最佳做法是在[反向代理](http://en.wikipedia.org/wiki/Reverse_proxy)後面運行您的Web服務器,因爲它可以很好地保護您低級漏洞 – goncalopp

回答

1

只要您採取適當的預防措施不要分發或發佈源代碼,使用硬編碼密碼肯定比網絡服務驗證它更安全。然而,有兩個問題:

  • 保持您的源代碼的祕密可能不會太難,但您可能很容易忘記您在將來硬編碼密碼變得對源代碼不小心。您可能想將其複製到朋友,或在github上發佈。
  • 使密碼硬編碼意味着有人妥協您的代碼可能很容易知道密碼。一個經過驗證的真正的網絡認證解決方案不會受到漏洞的影響 - 您的代碼幾乎可以肯定會發生。

您應該考慮的潛在替代方法是使用密碼保存純文本文件,並根據需要進行閱讀。它可以緩解(但不會消除)這兩個問題,並且如果您的操作系統支持正確的文件權限和用戶權限分離,還可以提高安全性。

一如既往,避免爲不同服務重複使用密碼。由於您將面臨互聯網的未經測試的代碼,請記住實施適當的操作系統級別的對策。

+0

感謝這是我需要的 – Fidel

+0

我不同意。正確設置的LDAP服務器將永遠不會直接顯示密碼。將使用API​​將用戶與用戶提供的密碼綁定,並且LDAP服務將返回成功或失敗。當然有人可以用蠻力攻擊單個用戶並猜測單個用戶的密碼,但如果他們攻擊了密碼文件,他們將獲得所有密碼。 – jwilleke

+0

@jeemster請注意我試圖從一般的角度回答這個問題。毫無疑問,網絡服務的特定實現可以比使用硬編碼密碼的特定實現更安全。然而,在其他條件相同的情況下,網絡上未公開的密碼檢查機制具有較少的攻擊面。最後,恕我直言,如果密碼是* unique *,並且協議傳輸密碼/散列而不是使用更復雜的認證機制(如質詢 - 響應),存儲散列密碼(而不是密碼)的好處可以忽略不計 – goncalopp