如何防止 PostgreSQL JSON/JSONB 字段中的 SQL 注入?

使用“数据库/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本机库。


慕标5832272
浏览 88回答 1
1回答

叮当猫咪

这是你要找的吗?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它不是用于检索的(尽管我为您保留了它,因此解决方案将与您的示例相匹配)。
打开App,查看更多内容
随时随地看视频慕课网APP