私の最初のWebアプリを構築し、SQLインジェクションをよりよく理解したい( https://github.com/astaxie/build-web-application-with-golang/blob/master/en/eBook/09.4.md )。
常に 'database/sql'ライブラリを使用し、 '?'を使用してクエリを作成するだけで、SQLインジェクションに対するどの程度の保護が得られますか?文字列を連結する代わりに?その場合でも、どのようなSQLインジェクション攻撃を心配する必要がありますか?
@Oneononeの回答に同意します。
データを取得する場合は、次のようにします。
db.Query("SELECT name FROM users WHERE age=?", req.FormValue("age"))
同じクエリを使用して大量のデータを安全に挿入する必要がある場合は、ここでPrepareが便利です。あなたはこのようなことをすることができます:
tx, err := db.Begin()
if err != nil {
return nil,err
}
stmt, err := tx.Prepare("INSERT INTO users VALUES (?, ?)")
if err != nil {
tx.Rollback()
return nil,err
}
defer
for i := 0; i < 10; i++ {
_, err = stmt.Exec(i, "dummy")
if err != nil {
tx.Rollback()
return nil,err
}
}
err = tx.Commit()
if err != nil {
stmt.Close()
tx.Rollback()
return nil,err
}
stmt.Close()
return someValue, nil