2014-01-20 42 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