我使用的是epgsql(https://github.com/epgsql/epgsql)lib,它允许编写如下查询:
"INSERT INTO my_table"
"(item_id, json_data) "
"VALUES ($1, $2) "
"ON CONFLICT "
"DO NOTHING "
"RETURNING *;",
然后用不同的参数调用这样的查询。一般来说,我们期望传入的数据范围很广,没有任何预定义的格式。我们唯一期望的是它是以下格式的JSON:{"field_name": "long value from the user with a potential injection of the SQL code I need to be protected from"}
我的问题是如何保护查询不受坏消息的影响。例如,有人输入了类似; DROP table ... ---
或类似的内容?
2条答案
按热度按时间ygya80vv1#
在为DB查询提供服务的情况下,很难进行调用清理。
我脑子里只有一个选择:
将输入的命令规范化为大写,删除双空格,将命令拆分为“;“-lines等,然后您可以潜在地对文本进行字典搜索,如“DROP TABLE...”或“DELETE FROM...”,以将命令标记为危险命令并阻止执行,也可以提供其他情况,但这会创建要维护的知识库。
slsn1g292#
考虑到其他语言的实现,我认为你必须自己写。