Comment se défendre contre l'injection SQL : utilisez des requêtes paramétrées : utilisez les entrées utilisateur comme paramètres de la requête plutôt que de les inclure dans la chaîne de requête. Utilisation du package SQLX : utilisez la bibliothèque SQLX pour paramétrer les requêtes avec des requêtes nommées et des espaces réservés. Valider l'entrée : validez la validité de l'entrée utilisateur avant de l'utiliser dans une requête SQL.
Comment se défendre contre l'injection SQL dans Go
L'injection SQL est une vulnérabilité de sécurité courante des applications Web qui permet aux attaquants d'accéder ou de modifier des données non autorisées en modifiant les requêtes SQL. Pour empêcher l'injection SQL dans Go, vous pouvez suivre les étapes suivantes :
1. Utiliser des requêtes paramétrées
Les requêtes paramétrées prennent les entrées de l'utilisateur comme paramètres de la requête au lieu de les inclure directement dans la chaîne de requête. Cela empêche les attaquants de modifier la requête pour injecter du code malveillant.
Exemple :
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. Utilisation du package SQLX
SQLX est une bibliothèque Go qui fournit un moyen typé d'exécuter des requêtes SQL et d'empêcher l'injection SQL. Il utilise des requêtes nommées et des espaces réservés pour paramétrer les requêtes.
Exemple :
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. Valider la saisie
Vérifiez la validité de la saisie de l'utilisateur avant de l'utiliser dans une requête SQL. Assurez-vous que l'entrée est correctement formatée et ne contient aucun caractère malveillant.
Exemple :
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 }
En suivant ces étapes, vous pouvez contribuer à prévenir les vulnérabilités d'injection SQL et à rendre vos applications Web Go plus sécurisées.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!