簡體   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