直接大小写绕过

image-20260205152920880

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Go标准库encoding/json在执行Unmarshal(反序列化)时JSON中的键映射到结构体字段的优先级为
1.精确匹配Tag
2.精确匹配字段名
3.不分大小写匹配

如果JSON中没有Tag和字段名,就会匹配不分大小写的字段名,如
type User struct{
role string
}
当我们发送{"Role","admin"},User结构体没有设置Tag,字段名也不匹配,最终在不分大小写中匹配到,role成功赋值admin

但是如果设置了Tag就不行了,如
type User struct{
role string `json:"role"`
}
这个必须要是role