java - 黑莓应用安全

标签 java web-services security blackberry

用户使用注册时提供的用户名和密码登录我的黑莓应用程序。我的应用程序连接到执行所有逻辑的 Java Web 服务。

  • 如何在我的服务器上以安全的方式存储密码和用户名?每个人都说加盐和散列,但我不知道该怎么做,因为我从未使用过它。我如何在 Java 中执行此操作?

  • 如何管理将密码安全地从应用程序发送到服务器?

最佳答案

要存储凭据,一种可能是使用 PBKDF2。 Java 实现(我没有使用过)is available here .通过它运行带有盐值的密码并存储生成的哈希数据。盐值通常是新生成的随机值(每个密码一个)。这有助于防止通过彩虹表(预先计算的散列密码表)进行字典攻击。使用java.security.SecureRandom有可能产生这些。

客户端应用程序可能应该使用 SSL/TLS 连接到服务器。这将提供加密以在从客户端传递到您的服务器应用程序时保护凭据。

编辑 根据我们在评论中的对话,听起来目标似乎不是使用 SSL。假设这是真的,并且没有计划其他端到端通信加密,那么这似乎意味着通信的安全性不是高优先级。如果那是真的,那么所描述的身份验证方案可能足以满足应用程序的需求。尽管如此,似乎值得指出潜在的问题,以便您考虑它们。

  • 建议的方案(我认为)是从客户端向服务器发送这个值:Hash(Hash(password,origsalt),randomsalt)。这真正意味着密码实际上是 Hash(password,origsalt)。如果攻击者可以获得该信息,那么他们就可以作为该用户登录,因为他们获取该值并将其与新的 salt 值进行散列以进行身份​​验证。换句话说,如果散列密码数据库遭到破坏,则攻击者可以轻松获得访问权限。这在某种程度上违背了首先对密码进行加盐和散列处理的目的。
  • 如果没有 SSL(或其他一些端到端加密),就有可能遭到中间人攻击。他们可以偷听甚至冒充谈话的一端。

关于java - 黑莓应用安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4970681/

相关文章:

java - 按键升序排序 map

java - 在Java中逐行读取和替换特定单词的问题

java - 不打死马 : running five "Hello World" java apps uses 700MB of RAM

asp.net - 仅针对网络服务关闭customErrors

web-services - 应用服务的固定和预留出站 IP

android - 我应该使用什么来保护 REST 网络服务中的参数

ruby-on-rails - 安全的 ERB 语言?

java - Hibernate 和 Jackson 惰性序列化

c# - 从桌面应用程序使用时的 PasswordVault 安全性

c# - WebService客户端异常: Cannot Import wsdl:binding