Skip to content

Instantly share code, notes, and snippets.

@WangYihang
Created July 19, 2018 06:49
Show Gist options
  • Save WangYihang/a45cc91be5f03f453d150f15dc9e58da to your computer and use it in GitHub Desktop.
Save WangYihang/a45cc91be5f03f453d150f15dc9e58da to your computer and use it in GitHub Desktop.
package main
import (
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mysql"
"github.com/satori/go.uuid"
"fmt"
)
type User struct {
ID uuid.UUID `gorm:"primary_key;type:char(36);"`
Name string
Age int
}
func main() {
// Connect
db, err := gorm.Open("mysql", "root:root@/test?charset=utf8&parseTime=True&loc=Local")
if err != nil {
fmt.Println("failed to connect database")
}
defer db.Close()
// Migrate
db.AutoMigrate(&User{})
// Create
// db.Debug().Create(&User{ID:uuid.Must(uuid.NewV4()), Name: "admin"})
// Generate a normal uuid
id, err := uuid.FromString("a4095d4c-5e5a-450f-8e4b-da12fc97f6e2")
if err != nil {
fmt.Println("UUID error")
}
// Generate a evil uuid
evil_id, err := uuid.FromString("00000000-0000-0000-0000-000000000000")
if err != nil {
fmt.Println("UUID error")
}
/*********************************************************************/
// Query with normal uuid
var user User
err = db.Debug().Where(&User{ID: id}).First(&user).Error
if err != nil {
fmt.Println("Query failed")
}
fmt.Println(user)
// Query with evil uuid
var evil_user User
err = db.Debug().Where(&User{ID: evil_id}).First(&evil_user).Error
if err != nil {
fmt.Println("Query failed")
}
fmt.Println(evil_user)
/*********************************************************************/
/*********************************************************************/
// Query with normal uuid with ?
var user_s User
err = db.Debug().Where("id = ?", id).First(&user_s).Error
if err != nil {
fmt.Println("Query failed")
}
fmt.Println(user_s)
// Query with evil uuid with ?
var evil_user_s User
err = db.Debug().Where("id = ?", evil_id).First(&evil_user_s).Error
if err != nil {
fmt.Println("Query failed")
}
fmt.Println(evil_user_s)
/*********************************************************************/
/*********************************************************************/
// Query with evil uuid
var evil_user_nil User
err = db.Debug().Where(&User{ID: uuid.UUID{}, Name: "", Age: 0}).First(&evil_user_nil).Error
if err != nil {
fmt.Println("Query failed")
}
fmt.Println(evil_user_nil)
/*********************************************************************/
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment