SQL 삽입을 방어하는 방법: 매개변수화된 쿼리 사용: 사용자 입력을 쿼리 문자열에 포함하지 않고 쿼리의 매개변수로 사용합니다. SQLX 패키지 사용: SQLX 라이브러리를 사용하여 명명된 쿼리 및 자리 표시자가 있는 쿼리를 매개 변수화합니다. 입력 유효성 검사: SQL 쿼리에 사용하기 전에 사용자 입력의 유효성을 검사합니다.
Go에서 SQL 주입을 방어하는 방법
SQL 주입은 공격자가 SQL 쿼리를 수정하여 승인되지 않은 데이터에 액세스하거나 수정할 수 있게 하는 일반적인 웹 애플리케이션 보안 취약점입니다. 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 웹 애플리케이션을 더욱 안전하게 만들 수 있습니다.
위 내용은 Golang에서 SQL 주입 보호를 사용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!