为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕标5832272 2023-06-01 14:16:41
使用“数据库/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它不是用于检索的(尽管我为您保留了它,因此解决方案将与您的示例相匹配)。



查看完整回答
反对 回复 2023-06-01
  • 1 回答
  • 0 关注
  • 86 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信