Cara mempertahankan diri daripada suntikan SQL: Gunakan pertanyaan berparameter: Gunakan input pengguna sebagai parameter pertanyaan dan bukannya memasukkannya dalam rentetan pertanyaan. Menggunakan pakej SQLX: Gunakan perpustakaan SQLX untuk membuat parameter pertanyaan dengan pertanyaan dan ruang letak bernama. Sahkan input: Sahkan kesahihan input pengguna sebelum menggunakannya dalam pertanyaan SQL.
Cara Mempertahankan SQL Injection dalam Go
SQL injection ialah kelemahan keselamatan aplikasi web biasa yang membolehkan penyerang mengakses atau mengubah suai data yang tidak dibenarkan dengan mengubah suai pertanyaan SQL. Untuk mengelakkan suntikan SQL dalam Go, anda boleh mengambil langkah berikut:
1 Gunakan pertanyaan berparameter
Pertanyaan berparameter mengambil input pengguna sebagai parameter pertanyaan dan bukannya memasukkannya terus dalam rentetan pertanyaan. Ini menghalang penyerang daripada mengubah suai pertanyaan untuk menyuntik kod hasad.
Contoh:
import ( "database/sql" "fmt" ) func main() { db, err := sql.Open("mysql", "root:password@/database_name") if err != nil { panic(err) } defer db.Close() username := "username" stmt, err := db.Prepare("SELECT * FROM users WHERE username = ?") if err != nil { panic(err) } rows, err := stmt.Query(username) if err != nil { panic(err) } defer rows.Close() if !rows.Next() { fmt.Println("用户不存在。") } }
2. Menggunakan pakej SQLX
SQLX ialah perpustakaan Go yang menyediakan cara bertaip untuk melaksanakan pertanyaan SQL dan menghalang suntikan SQL. Ia menggunakan pertanyaan yang dinamakan dan ruang letak untuk parameterkan pertanyaan.
Contoh:
import ( "database/sql" "fmt" "github.com/jmoiron/sqlx" ) func main() { db, err := sql.Open("mysql", "root:password@/database_name") if err != nil { panic(err) } defer db.Close() dbx := sqlx.NewDb(db, "mysql") username := "username" stmt, err := dbx.PrepareNamed("SELECT * FROM users WHERE username = :username") if err != nil { panic(err) } rows, err := stmt.Queryx(map[string]interface{}{"username": username}) if err != nil { panic(err) } defer rows.Close() if !rows.Next() { fmt.Println("用户不存在。") } }
3. Sahkan input
Sahkan kesahihan input pengguna sebelum menggunakannya dalam pertanyaan SQL. Pastikan input diformat dengan betul dan tidak mengandungi sebarang aksara berniat jahat.
Contoh:
func validateInput(input string) error { if len(input) > 100 || len(input) == 0 { return errors.New("无效的输入长度") } for _, r := range input { if !unicode.IsLetter(r) && !unicode.IsDigit(r) { return errors.New("无效的输入字符") } } return nil }
Dengan mengikuti langkah ini, anda boleh membantu mencegah kelemahan suntikan SQL dan menjadikan aplikasi web Go anda lebih selamat.
Atas ialah kandungan terperinci Bagaimana untuk menggunakan perlindungan suntikan SQL di Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!