How can I prevent SQL injection attacks in Go while using “database/sql”?

后端 未结 2 937
深忆病人
深忆病人 2020-12-08 10:53

Building my first web-app and want to understand SQL injection better (https://github.com/astaxie/build-web-application-with-golang/blob/master/en/eBook/09.4.md).

Ho

相关标签:
2条回答
  • 2020-12-08 11:11

    I agree with @Oneonone's answer.

    If you are retrieving data, do something like:

    db.Query("SELECT name FROM users WHERE age=?", req.FormValue("age"))
    

    If you have to insert a lot of data safely, using the same query, this is where Prepare comes handy. you can do something like this:

    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
    

    ref: https://stackoverflow.com/a/46476451/5466534

    0 讨论(0)
  • 2020-12-08 11:20

    As long as you're using Prepare or Query, you're safe.

    // this is safe
    db.Query("SELECT name FROM users WHERE age=?", req.FormValue("age"))
    // this allows sql injection.
    db.Query("SELECT name FROM users WHERE age=" + req.FormValue("age"))
    
    0 讨论(0)
提交回复
热议问题