【问题标题】:Approaches to dynamically assemble PostgreSQL jsonb queries without string concatenation无需字符串连接即可动态组装 PostgreSQL jsonb 查询的方法
【发布时间】:2017-09-28 12:14:31
【问题描述】:

我想从 Java / Spring Boot 应用程序查询 PostgreSQL 数据库中的 jsonb 列。

jsonb 文档的结构事先是未知的,尽管所有文档都具有相同的结构。 jsonb列中的文档结构在数据库表中描述。

应用程序从数据库中获取jsonb文档结构描述。下一步是对 jsonb 数据运行分析查询。

分析查询必须动态组装,因为 jsonb 数据的结构在开发时是未知的。 如何在不手动连接字符串的情况下在 Java 代码中创建查询?

我担心手动组装查询会很复杂、不可读并且可能会造成 SQLi 漏洞。

【问题讨论】:

标签: java postgresql spring-boot jsonb


【解决方案1】:

你不能。如果您需要从存储在其他表中的元数据动态构建 SQL 查询,则必须使用字符串连接来构建 SQL。

感谢您对 SQL 注入漏洞的了解和关注,但这只是在使用用户提供的值时才需要考虑的问题。

如果保证元数据是安全的,那么您可以安全地使用该元数据来动态构建 SQL 语句。如果元数据由用户输入,即它是用户提供的,您有三个选择:

  1. 验证条目时的元数据,例如确保字段名称是有效名称。

  2. 在构建 SQL 时对元数据进行编码。这意味着引用字段名称。如果元数据包含值(例如用于过滤),则应将值作为? 参数标记插入到 SQL 中,并将实际值提供给PreparedStatement 对象。

  3. 以上两者。双重保护是件好事。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-08
    • 1970-01-01
    • 1970-01-01
    • 2019-11-26
    • 1970-01-01
    • 1970-01-01
    • 2013-06-20
    • 1970-01-01
    相关资源
    最近更新 更多