簡體   English   中英

如何驗證登錄名/密碼JDBC的正確性

[英]How to verify correctness of login/password JDBC

我正在創建一個非常簡單的ATM機。 我有MySQL DB,其列如:loginID,密碼,錢。 我想更改我的方法,該方法可以在開始時驗證登錄名和密碼的正確性(然后執行某些操作)。 因此,如果登錄名和密碼正確,那么我想收到“登錄成功”或“登錄失敗”消息。現在我總是收到“登錄成功”消息。如何更改?

    public static void post () throws Exception{

    Scanner sc = new Scanner(System.in);
    System.out.println ("please enter user id:");
    String userId = sc.nextLine();
    System.out.println("please enter password:");
    String pass = sc.nextLine();
    System.out.println("how much you want to put");
    int money = sc.nextInt();

    try {
        Connection con = ConnectionDB.getConnection();
        String sql = "UPDATE `BankDB`.`Info` SET `Money`= ? WHERE `ClientID`= ? AND `ClientPass` = ?";

        PreparedStatement posted = con.prepareStatement(sql);
        posted.setInt(1, money);
        posted.setString(2, userId);
        posted.setString(3, pass);


        posted.executeUpdate();
        con.close();
    } catch (Exception e) {
        e.printStackTrace();
    } finally{
        System.out.println("Login was succesful");
    }
}

如果我對問題的理解是正確的,則需要檢查update命令是否確實更新了DB中的某些內容。 在這種情況下,您需要從posted.executeUpdate()獲得結果。 如果大於零,則更新數據庫中的更新記錄,並且用戶名/密碼正確。

即使UPDATE查詢的WHERE子句選擇零行,它們也可以工作。 所以你的查詢

 UPDATE `BankDB`.`Info` SET `Money`= ? WHERE `ClientID`= ? AND `ClientPass` = ?

如果WHERE子句的任何部分都不匹配,則不執行任何操作。 但是它仍然成功。

通常,您想要執行此大綱中所示的操作。

  1. SELECT id, password FROM Info WHERE ClientId = ?
  2. 檢查密碼是否與您的網絡用戶提供的密碼匹配。 如果不匹配,則拒絕交易。
  3. UPDATE Info SET Money = Money + ? WHERE id = ? 提供您在第一步中檢索到的id值。

危險在充滿網絡犯罪分子的世界中,驗證用戶密碼的方式非常危險 眾所周知,將純文本密碼存儲在dbms中是您在安全性方面最糟糕的事情。 這是關於php中的密碼哈希處理,但其建議對任何語言均有效。 請閱讀。 http://php.net/manual/zh-cn/faq.passwords.php不要在密碼安全領域重塑輪胎。 請。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM