gpt4 book ai didi

JDBI - JDBI 中的@define 和@bind 有什么区别?

转载 作者:行者123 更新时间:2023-12-04 18:59:25 24 4
gpt4 key购买 nike

这两个功能是否都经过 sanitizer /安全以防止 SQL 注入(inject)?例如,考虑以下情况:

@SqlUpdate("INSERT INTO <tableName> (<columns>) VALUES (<values>)")
public abstract void addRowToDataset(@Define("tableName") String tableName, @Define("columns") String columns, @BindIn("values") Collection<Object> values);

我目前的理解是 @define从字面上将字符串按原样插入到查询中,但 @bind进行 sanitizer 。所以如果我们控制 columns和表名 parameters并且只有 values参数是用户输入,那么我们应该没问题。

最佳答案

我遇到了同样的问题,发现答案出奇地难以找到。一位同事告诉我,这只是编程一代之前的常识,所以随着软件的发展,它的文档可能被遗忘了。

事实上,甲骨文的Binding and Defining起初看起来很有希望,但完全是误导,因为它的“定义”是指设置引用来检索结果,这在 JDBI 中根本不是这个意思。

如果我的同事是对的,这就是他们的实际意思:

  • @Define用于常量,并插入格式 <field> .
  • @Bind用于变量,并插入格式 :field (“命名参数”)。你是对的:绑定(bind)的副作用是会发生 sanitizer 。
  • @BindIn用于列表,并插入格式 (element IN (<field>)) .元素也经过 sanitizer 。

  • 我的错误是使用 <field> @Bind 的格式参数,这导致插值始终为空字符串。

    关于JDBI - JDBI 中的@define 和@bind 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41620956/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com