Mar*_*kis 4 java regex sql security sql-injection
我有一个搜索表,用户可以使用类型的过滤器过滤结果:
因此,用户将能够设置任意一组过滤器,这将基本上产生一个完全动态的WHERE子句.将来我还需要实现更复杂的逻辑表达式,比如
Where(name = John OR name = Nick)AND(surname = Blake OR surname = Bourne),
在用户可能过滤或不过滤的所有10个字段中,我不知道用户将设置多少和哪些过滤器.所以,我不能使用预准备语句(假设至少我们知道WHERE子句中的字段).这就是为什么准备好的语句不可避免的问题,我必须使用普通的旧生成的SQL来完成它.
我可以采取哪些措施来保护应用程序免受SQL注入(REGEX方式或任何其他方式)?
Java,未经测试.
List<String> clauses = new ArrayList<String>();
List<String> binds = new ArrayList<String>();
if (request.name != null) {
binds.add(request.name);
clauses.add("NAME = ?");
}
if (request.city != null) {
binds.add(request.city);
clauses.add("CITY = ?");
}
...
String whereClause = "";
for(String clause : clauses) {
if (whereClause.length() > 0) {
whereClause = whereClause + " AND ";
}
whereClause = whereClause + clause;
}
String sql = "SELECT * FROM table WHERE " + whereClause;
PreparedStatement ps = con.prepareStatment(sql);
int col = 1;
for(String bind : binds) {
ps.setString(col++, bind);
}
ResultSet rs = ps.executeQuery();
Run Code Online (Sandbox Code Playgroud)