gpt4 book ai didi

go - 防止beego中的SQL注入(inject)

转载 作者:行者123 更新时间:2023-12-03 10:10:14 26 4
gpt4 key购买 nike

我正在使用选择查询使用以下代码从我的表中获取一些行。

func (f *UserFilter) ListAllUsers(srch string) (cnt int64, l []*ListResp, err error) {
o := orm.NewOrm()
var args []interface{}
var w string
q := `SELECT * FROM users WHERE 1 = 1`
if srch != "" {
q += ` AND (LOWER(first_name) LIKE %?% OR LOWER(last_name) LIKE %?% OR id = ?)`
args = append(args, srch, srch, srch)
}
_, err = o.Raw(q, args).QueryRows(&l)

return
}
虽然我使用准备好的语句来绑定(bind)值,但它们没有为字段 first_name 正确转义。和 last_name .例如,如果值 srch是不是它会破坏查询。有什么方法可以转义这些值,以便在使用 MySql 驱动程序时防止 SQL 注入(inject)?
任何帮助深表感谢。提前致谢。

最佳答案

%通配符应该在字符串内部,而不是在字符串外部,即 ... LIKE %'foo'% ...无效,... LIKE '%foo%' ...已验证。更多关于 LIKE .

func (f *UserFilter) ListAllUsers(srch string) (cnt int64, l []*ListResp, err error) {
o := orm.NewOrm()
var args []interface{}
var w string
q := `SELECT * FROM users WHERE 1 = 1`
if srch != "" {
q += ` AND (LOWER(first_name) LIKE ? OR LOWER(last_name) LIKE ? OR id = ?)`
args = append(args, "%"+srch+"%", "%"+srch+"%", srch)
}
_, err = o.Raw(q, args...).QueryRows(&l)

return
}
或者使用mysql的 CONCAT :
func (f *UserFilter) ListAllUsers(srch string) (cnt int64, l []*ListResp, err error) {
o := orm.NewOrm()
var args []interface{}
var w string
q := `SELECT * FROM users WHERE 1 = 1`
if srch != "" {
q += ` AND (LOWER(first_name) LIKE CONCAT('%', ?, '%') OR LOWER(last_name) LIKE CONCAT('%', ?, '%') OR id = ?)`
args = append(args, srch, srch, srch)
}
_, err = o.Raw(q, args...).QueryRows(&l)

return
}

关于go - 防止beego中的SQL注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64765502/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com