在Go語言中,為了防止SQL注入攻擊,你可以使用預編譯語句(prepared statements)和參數化查詢。Go的database/sql
包提供了對預編譯語句的支持。這里是一個簡單的示例,展示了如何使用預編譯語句防止SQL注入:
package main
import (
"database/sql"
"fmt"
"log"
_ "github.com/go-sql-driver/mysql"
)
func main() {
// 連接數據庫
db, err := sql.Open("mysql", "username:password@tcp(localhost:3306)/dbname")
if err != nil {
log.Fatal(err)
}
defer db.Close()
// 準備SQL語句
stmt, err := db.Prepare("INSERT INTO users(username, password) VALUES (?, ?)")
if err != nil {
log.Fatal(err)
}
defer stmt.Close()
// 執行SQL語句
_, err = stmt.Exec("JohnDoe", "password123")
if err != nil {
log.Fatal(err)
}
fmt.Println("User inserted successfully")
}
在這個示例中,我們使用了db.Prepare()
函數來準備一個帶有參數的SQL語句。注意問號(?)作為占位符,它們將在執行時被實際的參數值替換。這種方法可以確保用戶輸入的數據不會被解釋為SQL代碼,從而防止SQL注入攻擊。
當你需要執行多個相似的SQL語句時,預編譯語句是一個很好的選擇,因為它們只需要在數據庫中編譯一次,然后可以多次執行。這樣可以提高性能并減少SQL注入的風險。