java - 使用JOOQ,我还需要什么来防止sql注入(inject)

标签 java jdbc prepared-statement sql-injection jooq

这怎么是重复的,因为我在这里专门询问 JOOQ?

我在 JAVA 项目中使用 JOOQ 来处理所有 PostgreSQL 查询。我读到this文章介绍了 JOOQ 使用准备好的语句来执行所有查询。

  1. 是否可以安全地假设我在执行查询时不需要担心 SQL 注入(inject)或用户输入?

  2. 我不需要担心在将用户输入交给 JOOQ 之前对其进行转义吗?

  3. 顺便说一句,我的数据库在获取用户输入时还存在哪些其他漏洞(除了通过准备好的语句解决的漏洞),我应该小心?

最佳答案

1) 可以,只要您正确使用提供的 API。但仍然可以注入(inject)普通的 sql 查询,所以要小心。

All methods in the jOOQ API that allow for plain (unescaped, untreated) SQL contain a warning message in their relevant Javadoc

// This query will use bind values, internally.
create.fetch("SELECT * FROM BOOK WHERE ID = ? AND TITLE = ?", 5, "Animal Farm");
// This query will not use bind values, internally.
create.fetch("SELECT * FROM BOOK WHERE ID = 5 AND TITLE = 'Animal Farm'");

请参阅此处的 JOOQ 文档以获取更深入的解释:https://www.jooq.org/doc/3.9/manual/sql-building/bind-values/sql-injection/

2)不,见上文。

3)除此之外,请注意一般数据库安全问题,例如用户身份验证/角色以及以未加密格式存储敏感数据等

关于java - 使用JOOQ,我还需要什么来防止sql注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47183032/

相关文章:

java - 当查询在 phpmyadmin 中运行时,JDBC 抛出语法错误

mysql - 使用 MySql 在 JDBC 中转义单引号

java - 将元组数组发送到准备好的语句

mysql - 使用带日期的 pdo prepare 和 UNION 不返回任何结果(mysql)

java - JTextPane 换行符

mysql - 从外部 MySQL 服务器导入/导出数据库

java - 调试 java jar 文件

php - 使用 PDO 插入 session 数据

java - 我想计算 jtable 中的数据,但出现错误 [Java]

java - 确保我正确地解决了这个问题