example/extension/sqlinject/sql_inject.go (34 lines of code) (raw):
package main
import (
"context"
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
"os"
"time"
)
func main() {
var mysqlDSN string
mysqlDSN = os.Getenv("MYSQL_DSN")
if mysqlDSN == "" {
mysqlDSN = "test:test@tcp(127.0.0.1:3306)/test"
}
db, err := sql.Open("mysql", mysqlDSN)
if err != nil {
return
}
// See "Important settings" section.
db.SetConnMaxLifetime(time.Minute * 3)
db.SetMaxOpenConns(10)
db.SetMaxIdleConns(10)
if _, err := db.ExecContext(context.Background(), `CREATE TABLE IF NOT EXISTS usersx (id char(255), name VARCHAR(255), age INTEGER)`); err != nil {
fmt.Printf("exec create error: %v", err)
}
if _, err := db.ExecContext(context.Background(), `INSERT INTO usersx (id, name, age) VALUES ( ?, ?, ?)`, "0", "foo", 10); err != nil {
fmt.Printf("exec insert error: %v", err)
}
// test sql inject
maliciousAnd := "'foo' AND 1 = 1"
injectedSql := fmt.Sprintf("SELECT * FROM userx WHERE id = '0' AND name = %s", maliciousAnd)
if _, err := db.Query(injectedSql); err != nil {
fmt.Printf("exec query error: %v", err)
}
}