Как я могу предотвратить атаки SQL-инъекций в Go при использовании «database / sql»?
Это решает проблему с полем с одним значением, потому что вы можете удалить кавычки, но я не могу сделать это, фильтруя поле JSON / JSONB, как показано ниже, потому что $1
считается строкой:
`SELECT * FROM foo WHERE bar @> '{"baz": "$1"}'`
Следующее работает, но оно подвержено SQL-инъекциям:
`SELECT * FROM foo WHERE bar @> '{"baz": "` + "qux" + `"}'`
Как мне решить эту проблему?
ИЗМЕНЕНО после комментария @ mkopriva:
Как бы построить этот json [{"foo": $1}]
с функциями jsonb_*
? Пробовал ниже безуспешно:
jsonb_build_array(0, jsonb_build_object('foo', $1::text))::jsonb
Там нет ошибки SQL. Фильтр просто не работает. Есть способ, которым я могу проверить построенный SQL? Я использую database/sql
нативную библиотеку.