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

C++ 調用 MySQL PASSWORD() 函數驗證用戶密碼:SQL 注入防範與參數化查詢

     編輯:程式設計綜合問答

不安全寫法 (拼接 SQL)

string sql = "SELECT 1 FROM users WHERE uid='" + user + "' AND pwd=PASSWORD('" + pwd + "')";

**極高風險**:`pwd` 含單引號即可注入。

安全:參數化查詢 (MySQL Connector/C++ / ODBC)

sql::PreparedStatement *pstmt = con->prepareStatement(
    "SELECT 1 FROM users WHERE uid=? AND pwd=PASSWORD(?)");
pstmt->setString(1, user);
pstmt->setString(2, pwd);
sql::ResultSet *res = pstmt->executeQuery();
bool valid = res->next();

更佳實踐:應用層哈希

  • 資料庫**不存明文、不依賴 MySQL PASSWORD()** (算法跨版本不穩定、不可移植)。
  • 應用層用 **bcrypt / Argon2 / PBKDF2** 哈希鹽值存儲,驗證時同算法比對。
  • C++ 可用 libcrypt / argon2 庫。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved