首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用MySQL验证用户身份的最佳方式(接受其他建议)?

使用MySQL验证用户身份的最佳方式(接受其他建议)?
EN

Stack Overflow用户
提问于 2011-08-24 14:58:42
回答 3查看 3.4K关注 0票数 4

我正在创建一个基于web的登录系统,为此,我使用MySQL作为我的后端,并使用JSPS和Servlet实现功能,还使用了一个名为Jasypt1.8的库来加密密码,以便稍后将它们存储在MySQL上。

我的问题是:以下代码(与安全相关的、最佳实践等)有什么问题吗?

代码语言:javascript
运行
复制
 protected boolean verifyUser(String user, String pass) throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException {

    StrongPasswordEncryptor passwordEncryptor = new StrongPasswordEncryptor();

    Connection conn = null;
    String userName = "****";
    String password = "****";
    String url = "jdbc:mysql://localhost:3306/DB";
    ResultSet rs = null;
    try {
        Class.forName("com.mysql.jdbc.Driver").newInstance();
        conn = DriverManager.getConnection(url, userName, password);
        System.out.println("Database connection established");

        PreparedStatement stmt = null;

        stmt = conn.prepareStatement("SELECT * FROM DB.LOGINS WHERE USER = ?");
        stmt.setString(1, user);
        rs = stmt.executeQuery();
        if(!rs.next()){
            return false;                
        }

        if(passwordEncryptor.checkPassword(pass, rs.getString("Password"))){
            return true;
        }
        conn.close();
    } catch (Exception e) {

    }
    return false;
}

我不知道将用户从数据库中取出,然后将其与已提供的密码进行比较是否正确。我认为最好的方法是使用用户名和密码从数据库中获取信息,而不仅仅是前者)。不幸的是,我不能这样做,因为我不能生成密钥,因为在库中没有方法可以做到这一点(并且我还没有能够在文档中找到生成密钥的算法)。

我这样做是因为我正在使用的库有一个内置的随机盐生成器,它将自己存储在加密后创建的字符串中(如果重要的话,请使用sha-256 ...)checkPassword()方法是唯一能够生成与存储在数据库中的密钥完全相同的密钥的方法(它已经经过了加密过程)。

无论如何,如果你有任何创建登录系统的经验,或者知道很多安全最佳实践,我希望你告诉我,如果你不觉得我的解决方案合适,你在这类问题上的经验是什么。

谢谢您抽时间见我。

EN

Stack Overflow用户

发布于 2011-08-24 18:22:18

还使用了一个名为jasypt1.8的库来加密密码

您不能加密密码。您应该对它们进行单向散列,并对散列进行比较。您不能提供任何可以被法律解释为其他人知道用户密码的方式。否则,你会失去交易的法律不可否认性,这会严重到让你破产的地步。你需要听取法律意见,这是非常非常严重的。

票数 0
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7171600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档