Java代码审计篇:SQL注入

一、常见SQL注入
1、sql语句动态拼接
示例代码:

String id=request.getParameter("id");
res = st.executeQuery("SELECT * FROM \"IWEBSEC\".\"user\" WHERE \"id\"="+id);
while(res.next()){
int p = res.getInt("id");
String n = res.getString("username");
String s = res.getString("password");
}

上述代码通过request.getParameter方法获取id值,通过 SELECT * FROM \”IWEBSEC\”.\”user\” WHERE \”id\”=”+id 进行了sql语句的动态拼接。通过executeQuerry执行sql语句,会发现id的参数是可控的并且可以进行sql语句的拼接。
2、预编译错误
示例代码:

`String username="user%' or '1'='1'#";
String id ="2";
String sql = "SELECT * FROM user where id = ?";
if (!CommonUtils.isEmptyStr(username))
sql += " and username like '%" + username + "%'";
System.out.println(sql);
PreparedStatement preparedStatement = conn.prepareStatement(sql);
preparedStatement.setString(1, id);
rs = preparedStatement.executeQuery();`

上述代码虽然使用了preparestatement预编译,但是在后面的username使用了sql语句拼接的方式,这样会导致sql注入。
3、order by 注入
原理:使用prepareStatement时,order by 后面需要加字段名,

你可能感兴趣的:(数据库)