我应该在Web服务器应用程序或数据库中散列用户密码? (专业人员&安培;缺点)

时间:2016-06-27 21:53:33

标签: java database oracle security hash

我正在尝试创建一个网站,该网站具有将用户注册为Oracle作为数据库并将JavaEE + Tomcat注册为服务器应用程序的功能。 我阅读了有关散列密码的不同技术和建议,并为每个用户使用独特的盐进行盐化。 我发现Java和Oracle都有工具可以做到这一点:
1)Oracle:https://oracle-base.com/articles/9i/storing-passwords-in-the-database-9i
2)Java:http://howtodoinjava.com/security/how-to-generate-secure-password-hash-md5-sha-pbkdf2-bcrypt-examples/

所以我可以用两种方式解决这个问题:

1)在Web应用程序中哈希密码,并通过JDBC连接发送到数据库哈希值;
2)将密码作为纯文本发送到数据库,并使用Oracle DBMS_CRYPTO包在其中执行散列。

我已经尝试过搜索此主题,但我发现的所有内容都是关于使用JavaScript与服务器端哈希进行客户端哈希的问题,而不需要重点关注数据库与Web应用程序部分。

也许没有确切的答案,所以,请告诉我: 这些解决方案有哪些优点和缺点?使用第一个或第二个可以面对哪些问题?

1 个答案:

答案 0 :(得分:1)

  1. 使用https连接。
  2. 根据输入发送密码。
  3. 在注册哈希(详细信息如下)密码并保存在DB
  4. 在登录时使用密码并与哈希值进行比较我是数据库。
  5. 如何哈希:
    不加密密码。使用随机盐在HMAC上迭代大约100ms的持续时间(盐需要用散列保存)。使用password_hash,PBKDF2,Bcrypt等功能。重点是让攻击者花费大量时间通过暴力破解密码。

    根据上面的散列方法,盐,迭代和版本都会使用散列密码保存,或者需要在代码中完成。

    请参阅OWASP(开放式Web应用程序安全项目)Password Storage Cheat Sheet

    请参阅Security Stackexchange上的How to securely hash passwords, The Theory