繁体   English   中英

从Java在MySql中存储用户名/密码

[英]Storing username/password in MySql from Java

我正在为Java GUI创建一个注册和登录页面,其中用户名和密码将在GUI中创建,然后存储在MySQL表中。 相关代码是-

    passL = new JPasswordField();
    userNameT = new JTextField();

    //Set up everything else


    submitB = new JButton("click to submit");
    frame.add(submitB);
    submitB.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            try {
                Class.forName("com.mysql.jdbc.Driver");
                Connection con = GetConnection.getConnectionInstance();
                PreparedStatement statement1 = con
                        .prepareStatement("INSERT INTO users (username, password) VALUES ("
                                + Integer.parseInt(userNameT.getText())
                                + ",SHA1('" + passT.getPassword() + "'))");
                statement1.executeUpdate();
            } //Catches exceptions etc

userNameT是数字,密码(passT)可以是任何数字(尚未写入约束)。

我的问题是Eclipse给我有关getPassword的警告-“必须明确将char []转换为String”。 我的操作方式是否存在安全问题?

复制后,我是否还需要直接将passT显式更改为null或空白,否则Java将自动执行此操作。

欢迎所有建议! 谢谢

问题是类型不匹配:“ getPassword ”返回一个char [] ,需要将其转换为要在查询中连接的String

一旦不再使用Java(即不会从任何地方引用),Java将负责垃圾回收您的对象,因此您不必担心。

也许唯一可以采取的安全预防措施是清除getPassword ”返回的数组

使用PreparedStatement的要点之一是防止SQL注入 ,但是使用它的方式仍然使您容易受到攻击。 相反,您应该考虑使用Java进行哈希处理,并设置如下所示的参数值:

String sql = "INSERT INTO users (username, password) VALUES (?, ?)";
PreparedStatement stmt = con.prepareStatement(sql);
stmt.setInt(1, Integer.parseInt(userNameT.getText()));
stmt.setString(2, DigestUtils.sha1Hex(String.valueOf(userPassT.getPassword())));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM