我的应用程序获取对数据库的String对象查询.例如.字符串查询= EMAIL,如’%test%’,USER_NAME类似’%user%’.查询是动态构建的,我不知道它的结构,因此我无法利用PrepareStatement.有谁知道在这种情况下防止SQL注入...
我的应用程序获取对数据库的String对象查询.例如.字符串查询= EMAIL,如’%test%’,USER_NAME类似’%user%’.查询是动态构建的,我不知道它的结构,因此我无法利用PrepareStatement.有谁知道在这种情况下防止SQL注入的方式?
数据库:Oracle
语言:Java 1.6
请帮忙.
解决方法:
即使您不知道结构,也可以使用PreparedStatement.让我用一个简单的例子来演示:
List<Object> arguments = new ArrayList<Object>();
String sql = "SELECT * FROM user WHERE someCondition = ?";
if (queryOnEmail) {
sql = sql + " AND email LIKE ?";
arguments.add(email);
}
if (queryOnUserName) {
sql = sql + " AND user_name LIKE ?";
arguments.add(userName);
}
PreparedStatement stmt = con.prepareStatement(sql);
int i = 1;
for(Object o : arguments) {
stmt.setObject(i, o);
i++;
}
当然,您可以将此SQL参数构造包装到其自己的类中以简化其用法.
沃梦达教程
本文标题为:java – 如何在动态查询中保护自己免受SQL注入?
基础教程推荐
猜你喜欢
- ResourceBundle类在jsp中的国际化实现方法 2023-08-01
- Java简明解读代码块的应用 2023-03-06
- Spring quartz Job依赖注入使用详解 2023-07-30
- Maven依赖管理之parent与dependencyManagement深入分析 2023-06-17
- Java 数据结构算法Collection接口迭代器示例详解 2023-05-19
- 聊一聊new对象与Spring对bean的初始化的差别 2022-11-02
- JDBC连接MySQL并实现模糊查询 2023-08-10
- java版spring cloud+spring boot+redis社交电子商务平台(十)使用Swagger2构建强大的RESTful API文档(2) 2023-11-04
- MyBatis加载映射文件和动态代理的实现 2023-07-15
- Spring JdbcTemplate执行数据库操作详解 2023-06-16