首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

JSP/SQL Server 字符串比較陷阱:SQL 用 =,Java 用 equals

     編輯:程式設計綜合問答

代碼片段:

String sql = "select * FROM Login WHERE account ='" + account + "'";
// ...
if (Integer.parseInt(password.trim()) == Integer.parseInt(acount.getPassword().trim())) {
    // ...
    out.print(acount.getId().trim() == "員工"); // 錯誤:== 比較引用
}

兩處關鍵錯誤

  1. SQL 拼接注入風險:
    用 PreparedStatement:
    String sql = "select * FROM Login WHERE account = ?";
    ps.setString(1, account);
  2. Java 字符串比較用 ==:
    acount.getId().trim() == "員工" 比較對象引用,**必須用 equals**:
    "員工".equals(acount.getId().trim())(防空指針)。

密碼比較改進

數據庫存儲明文密碼極度危險,應存 BCrypt 哈希:

// 註冊
String hash = BCrypt.hashpw(password, BCrypt.gensalt());
// 登錄驗證
if (BCrypt.checkpw(inputPassword, storedHash)) { ... }

其他問題

  • Integer.parseInt 比較密碼?密碼應為字符串,不可轉數字(導致前導零丟失、非數字報錯)。
  • 資源關閉用 try-with-resources (JDBC 4.1+)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved