使用“数据库/sql”时如何防止 Go 中的 SQL 注入攻击?这解决了单值字段问题,因为您可以删除引号,但我无法过滤 JSON/JSONB 字段,如下所示,因为 被$1视为字符串:`SELECT * FROM foo WHERE bar @> '{"baz": "$1"}'`以下是可行的,但它容易出现 SQL 注入:`SELECT * FROM foo WHERE bar @> '{"baz": "` + "qux" + `"}'`我该如何解决这个问题?我将如何使用这些函数构建这个[{"foo": $1}]json jsonb_*?尝试了以下但没有成功:jsonb_build_array(0, jsonb_build_object('foo', $1::text))::jsonb没有sql错误。过滤器不起作用。有一种方法可以检查构建的 sql 吗?我正在使用database/sql本机库。
1 回答
叮当猫咪
TA贡献1776条经验 获得超12个赞
这是你要找的吗?
type MyStruct struct {
Baz string
}
func main() {
db, err := sql.Open("postgres", "postgres://...")
if err != nil {
log.Panic(err)
}
s := MyStruct{
Baz: "qux",
}
val, _ := json.Marshal(s)
if err != nil {
log.Panic(err)
}
if _, err := db.Exec("SELECT * FROM foo WHERE bar @> ?", val); err != nil {
log.Panic(err)
}
}
附带说明一下,Exec
它不是用于检索的(尽管我为您保留了它,因此解决方案将与您的示例相匹配)。
- 1 回答
- 0 关注
- 109 浏览
添加回答
举报
0/150
提交
取消