Open futianshen opened 5 years ago
預防 SQL Injection
建立一個可以重複使用的 SQL 模板,引入參數,提供參數化查詢 [1]。
$read_user = $conn->prepare("SELECT users.id, users.nickname FROM certificates LEFT JOIN users ON users.id = certificates.user_id WHERE certificates.id =? AND certificates.is_deleted=? "); //1. 準備模板:將 SQL 指令的原來要放變數的地方用 ? 代替 $read_user->bind_param("si", $session_id, 0); //2. 綁定參數:指定變數型別綁定參數 $read_user->execute(); //3. 執行SQL:執行綁定參數的 SQL 指令 $read_user_result = $read_user->get_result(); //4. 獲得執行結果 $read_user_row = $read_user_result->fetch_assoc();
利用參數化查詢過程,會將字串轉換成非字串型別的特性,來阻絕惡意 SQL 指令的執行。
[1] 參數化查詢 在存取或改變資料庫資料時,在需要填入「資料」的地方,使用參數(Parameter)來給值。
參數化查詢 Wikipedia
PHP Prepared Statements W3Schools
Prepared Statements PHP Documentation
Prepare Statement
為什麼要使用 Prepare Statement?
預防 SQL Injection
Prepare Statement 的原理?
建立一個可以重複使用的 SQL 模板,引入參數,提供參數化查詢 [1]。
如何使用 Prepare Statement?
為什麼 Prepare Statement 可以預防 SQL injection?
利用參數化查詢過程,會將字串轉換成非字串型別的特性,來阻絕惡意 SQL 指令的執行。
註解
[1] 參數化查詢
在存取或改變資料庫資料時,在需要填入「資料」的地方,使用參數(Parameter)來給值。
參考資料
參數化查詢 Wikipedia
PHP Prepared Statements W3Schools
Prepared Statements PHP Documentation