use*_*654 4 java sql oracle sql-injection
我的应用程序获取对数据库的String对象查询.例如String query = EMAIL like '% test%' and USER_NAME like '% 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++;
}
Run Code Online (Sandbox Code Playgroud)
当然,您可以将此SQL + arguments构造包装到其自己的类中,以简化其用法.
归档时间: |
|
查看次数: |
2921 次 |
最近记录: |