防御 SQL 注入
在原系统中,用户输入被直接连接到SQL查询字符串中,没有任何净化或参数化。这是SQL注入漏洞的常见原因。
为了防止SQL注入攻击,我们改用参数化查询或预处理语句,而不是直接将用户输入连接到SQL查询中。这可以帮助防止恶意输入被执行为SQL代码。
在提供的代码中,
String sql = "select * from t_user where username='"+username.trim()+"'";
这一行将username参数直接连接到SQL查询中。这是一个潜在的漏洞。
发现可以攻击成功
改为
String sql = "select * from t_user where username = ?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, username.trim());
rs = pstmt.executeQuery();
成功防范了该漏洞