使用带有用户输入的JOOQ来安全地设置MySQL变量

时间:2018-09-06 02:14:37

标签: java mysql sql-injection jooq

我正在尝试使用JOOQ这样设置MySQL变量。 value是用户输入。

DSLContext dslContext = DSL.using(connection, dialect);
dslContext.execute("set @myvar :=" + value);

尽管这可以按预期工作,但我担心通过用用户输入执行普通SQL可能允许的SQL注入。在JOOQ中,有没有一种方法可以通过准备好的语句或其他任何更安全的方法来实现相同的目的?

1 个答案:

答案 0 :(得分:2)

使用普通的SQL模板API: https://www.jooq.org/doc/latest/manual/sql-building/plain-sql-templating

例如如果您使用的是简单的绑定变量:

 dslContext.execute("set @myvar := ?", value);

或者,如果您希望使用更复杂的表达式:

 dslContext.execute("set @myvar := {0}", DSL.val(value));

默认情况下,jOOQ在幕后始终会执行一条准备好的语句。