SQL インジェクションを防ぐ方法: パラメーター化されたクエリを使用する: ユーザー入力をクエリ文字列に含めるのではなく、クエリのパラメーターとして使用します。 SQLX パッケージの使用: SQLX ライブラリを使用して、名前付きクエリとプレースホルダーを使用してクエリをパラメータ化します。入力の検証: SQL クエリで使用する前に、ユーザー入力の有効性を検証します。
Go で SQL インジェクションを防御する方法
SQL インジェクションは、攻撃者が SQL クエリを変更することで未承認のデータにアクセスしたり、不正なデータを変更したりできる一般的な Web アプリケーションのセキュリティ脆弱性です。 Go で SQL インジェクションを防ぐには、次の手順を実行します:
1. パラメーター化されたクエリを使用する
パラメーター化されたクエリは、ユーザー入力をクエリ文字列に直接含めるのではなく、クエリのパラメーターとして受け取ります。これにより、攻撃者がクエリを変更して悪意のあるコードを挿入することを防ぎます。
例:
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. SQLX パッケージの使用
SQLX は、SQL クエリを実行し、SQL インジェクションを防ぐための型指定された方法を提供する Go ライブラリです。名前付きクエリとプレースホルダーを使用してクエリをパラメータ化します。
例:
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. 入力の検証
SQL クエリで使用する前に、ユーザー入力の妥当性を検証します。入力が正しい形式であり、悪意のある文字が含まれていないことを確認してください。
例:
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 }
これらの手順に従うことで、SQL インジェクションの脆弱性を防止し、Go Web アプリケーションの安全性を高めることができます。
以上がGolang で SQL インジェクション保護を使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。