如果参数不包含单引号,然后用单引号四舍五入,是否可以执行 SQL 注入?

Is it possible to execute a SQL Injection if a parameter contains no single quotes and is then sorrounded by single quotes?

提问人:Simone Lungarella 提问时间:10/19/2021 最后编辑:Simone Lungarella 更新时间:10/19/2021 访问量:150

问:

如果解析参数以删除包含的所有单引号,然后用单引号括起来,是否仍然可以进行 SQL 注入?我知道这看起来很糟糕,一般来说,使用准备好的语句要好得多,但是,出于好奇,我想知道是否有一种方法,甚至更好的例子,如果参数如下,如何对数据库造成损害:

String nativeQuery = "INSERT INTO USER (NAME) VALUES (' " + username.replace("'", "") + "')";
EntityManager em = getEm();
Query query = em.createNativeQuery(nativeQuery);
query.executeUpdate();

我没有在网上找到任何解释这种特定情况的资源,似乎不可能从字符串中执行任何命令,有人可以确认吗?即使底部的标签中不存在使用的方言,答案也值得赞赏。

java mysql oracle sql 注入

评论

1赞 astentx 10/19/2021
使用 preparedStatement,然后使用 .它将传递数据,而不是注入的 SQL 文本setString
0赞 Simone Lungarella 10/19/2021
有没有办法用 EntityManager 做到这一点?创建 Query 对象 我只能设置参数,没有办法设置 String。
0赞 astentx 10/19/2021
我不懂java,也无法告诉你如何使用EntityManager做到这一点。但是,对于任何语言和任何RDBMS,基本原则都是一样的:准备调用(即SQL解析和构建查询计划),绑定变量(将数据作为调用的输入/输出参数传递),然后执行(执行实际执行)

答: 暂无答案